/*
List Test.
AKS 18/4/96.
*/


procedure checkeq(L1, L2)
    assert #L1 eq #L2;
    assert forall{1: i in [1 .. #L1] | L1[i] eq L2[i]};
end procedure;

L1 := SequenceToList([1 .. 5]);
checkeq(L1, [* 1, 2, 3, 4, 5 *]);

L2 := TupleToList(<1, 1/2, "string">);
checkeq(L2, [* 1, 1/2, "string" *]);

assert IsEmpty([* *]);
assert not IsEmpty([* 1 *]);

L := L1;
L cat:= L2;
checkeq(L, L1 cat L2);
checkeq(L, [* 1, 2, 3, 4, 5, 1, 1/2, "string" *]);

L := L2;
Append(~L, true);
checkeq(L, Append(L2, true));
checkeq(L, [* 1, 1/2, "string", true *]);

L := L2;
Prune(~L);
checkeq(L, Prune(L2));
checkeq(L, [* 1, 1/2 *]);

L := L1;
L[3] := 1/2;
checkeq(L, [* 1, 2, 1/2, 4, 5 *]);

L[1] := [1];
checkeq(L, [* [1], 2, 1/2, 4, 5 *]);
L[1][2] := 3;
checkeq(L, [* [1, 3], 2, 1/2, 4, 5 *]);
L[6] := -1;
checkeq(L, [* [1, 3], 2, 1/2, 4, 5, -1 *]);

//quit;
