This directory contains a set of Algol 60 validation tests, which were
kindly provided by Mr Brian Wichmann <brian.wichmann@totalise.co.uk>,
one of the authors of the Modified Report on Algol 60.

The following files are included in this directory:

README         The file you are reading.

test.tar.gz    Original validation tests. The hardware representation
               corresponds to the Whetstone and Kidsgrove Algol
               translators implemented on the KDF9 computer. For more
               details see:

               Randell, B. and Russell, L. J. "Algol 60 Implementation"
               Academic Press, London, 1964.

report.pdf     The report "Some validation tests for Algol 60 compiler"
               by Brian Wichmann.

test001.alg, ..., test130.alg
               The validation tests modified to be used with GNU Marst.
               The modification was merely to change all main symbols
               to the Marst hardware representation.

test055.dat    Input data for test 55.

listing.txt    Listing containing all the validation test running with
               Marst 2.6 and GCC 3.4.4.

All the tests were passed successfully with the following exceptions.

Test 16 is not relevant, because Marst expects string literals to be
coded as in C. (Note that this is the only difference from the syntax
of the reference language.)

Test 42 was not passed, because Marst does not allow array dimension to
be greater than 9.

Test 75 was not passed, because no input data was provided.

Test 87 was not passed, because Marst implements the for operator as
defined in the Modified Report:

   4.6.4.2. Step-until element

   If A, B and C are arithmetic expressions then

      for V := A step B until C do S

   is equivalent to

      begin <type of B> Theta;
      V := A;
Gamma:Theta := B;
      if (V - C) * sign(Theta) <= 0 then
         begin
         S; V := V + Theta;
         go to Gamma;
         end
      end

that assumes that the step value B is evaluated once before enter to
the loop.

However, Mr David Hill, one of the authors of the Modified Report,
informed me that the Computer Journal version is not the final word. In
particular, he said:

   "There was a further development concerning a change in the
   interpretation of the step-until element (para 4.6.4.2). It was
   annoying that we got this right originally but, when the draft went
   out for comment, we got one that caused us to alter it. After
   publication more comments came in that caused us to revert to the
   earlier version. This is explained in Computer Journal, 1978, 21,
   282."

   "The first of these was included in the 1981 Netherlands Standard
   and the 1984 International Standard (ISO 1538-1984, now withdrawn).
   The first, and a slightly different version of the second, in the
   1982 Russian Standard (in Russian)."

In other word, paragraph 4.6.4.2 of the Modified Report was replaced by
the following:

   4.6.4.2. Step-until element

   If A, B and C are arithmetic expressions then

      for V := A step B until C do S

   is equivalent to

      begin <type of B> Theta;
      V := A;
      Theta := B;
Gamma:if (V - C) * sign(Theta) <= 0 then
         begin
         S; Theta := B; V := V + Theta;
         go to Gamma;
         end
      end

that assumes that the step value B should be re-evaluated every time on
execution of the loop.


Andrew Makhorin,
the author and maintainer of GNU Marst
