blob: fcd93c85c4412fc65fa0a82823f7292204a660bc [file]
# { dg-options "-fstropping=upper" } #
# Procedure declarations III #
BEGIN # From the ALGOL68 Revised Report. #
PROC my char in string = (CHAR c, REF INT i, []CHAR s) BOOL:
BEGIN BOOL found := FALSE;
FOR k FROM LWB s TO UPB s WHILE NOT found
DO (c = s[k] | i := k; found := TRUE) OD;
found
END;
ASSERT ((INT idx := 0;
my char in string ("o", idx, "foo")
ANDTH idx = 2));
ASSERT (my char in string ("x", LOC INT, "foo") = FALSE);
# Swapping function. #
PROC swap = (REF INT a, b) VOID:
(INT r = a; a := b; b := r);
ASSERT ((INT x := 1, y := 2;
swap (x, y);
x = 2 AND y = 1));
# Euclid's algorithm. #
PROC hcf = (INT m, n) INT:
BEGIN INT a := m, b := n;
IF a < b THEN swap (a, b) FI;
WHILE b /= 0
DO INT c = b; b := a MOD b; a := c OD;
a
END;
ASSERT (hcf (10, 20) = 10)
END