#!vsl

// $Id: list,v 1.1.1.1 1995/05/01 15:48:49 zeller Exp $ 
// Testdatei fuer "list.vsl"

// $Log: list,v $
# Revision 1.1.1.1  1995/05/01  15:48:49  zeller
# DDD 0.9 distribution
#
// Revision 9.3  1993/06/25  12:02:06  zeller
// Fix: Kommentare Log-Datei angepasst
//
// Revision 9.2  1993/05/22  20:22:37  zeller
// %Q% added by apply-q-flag.sh 1.5
//
// Revision 9.1  1991/07/08  06:01:46  zeller
// Installierte Version
// 
// Revision 8.1  1991/07/06  15:04:50  zeller
// Installierte Version
// 
// Revision 4.1  1991/05/25  12:53:37  zeller
// Neue Version mit folgenden Eigenschaften:
// Let- und Where-Konstrukten;
// Lokalen und globalen Funktionen, Overloading;
// Erweiterten Fehlermeldungen.
// 
// Revision 1.5  1991/04/30  15:31:24  zeller
// Aequivalenz Argumentliste <-> gewoehnliche Liste gezeigt
// 
// Revision 1.4  1991/04/27  17:24:11  zeller
// Neuer Operator: CONS (::)
// 
// Revision 1.3  1991/04/27  14:48:15  zeller
// Operatoren umgestellt: '|' -> ':', '!' -> '|' (wie gehabt)
// 
// Revision 1.2  1991/04/17  10:04:36  zeller
// Versionsangabe korrigiert
// 
// Revision 1.1  1991/04/17  09:48:32  zeller
// Initial revision
// 

#include <list.vsl>

_numlist([head]) = num(head);
_numlist([head : tail]) = num(head) & ", " & _numlist(tail);
_numlist(atom) = num(atom);
numlist([]) = "[]";
numlist(l) = "[" & _numlist(l) & "]";

car_test() = num(car([1, 2, 3]));
cdr_test() = numlist(cdr([1, 2, 3]));
cons_test() = numlist([1, 2] :: [3, 4] :: [5, 6]);
append_test() = numlist(append([1, 2, 3], 4));

bool(a) = if a then "T " else "F " fi;
list_true_test() = bool(member(2, [1, 2, 3])) &
	bool(prefix([1, 2], [1, 2, 3])) &
	bool(suffix([2, 3], [1, 2, 3])) &
	bool(sublist([2, 3], [1, 2, 3, 4]));

list_false_test() = bool(member(4, [1, 2, 3])) &
	bool(prefix([1, 4], [1, 2, 3])) &
	bool(suffix([1, 3], [1, 2, 3])) &
	bool(sublist([2, 4], [1, 2, 3, 4]));

reverse_test() = numlist(reverse([1, 2, 3, 4]));

delete_test() = numlist(delete([4, 5, 5, 6], 5));

select_test() = numlist(select([4, 5, 5, 6], 5));

flat_test() = numlist(flat([[3, 4], [[5], [6]]]));

sort_test() = numlist(sort([2, 1, 3])) & 
	numlist(sort([9, 5, 7, 4, 2, 1, 3, 8, 6]));

// convert an argument list into a list
atol(a...) = numlist(a);
args_to_list_test() = atol(1, 2, 3);

// convert a list into an argument list
ltoa(list) = atol(list...);
list_to_args_test() = ltoa([1, 2, 3]);


// all tests
all_list_tests() = 
  car_test()  			& vcenter(" // car_test()")
| cdr_test() 			& vcenter(" // cdr_test()")
| cons_test()			& vcenter(" // cons_test()")
| append_test()			& vcenter(" // append_test()")
| list_true_test()		& vcenter(" // list_true_test()")
| list_false_test()		& vcenter(" // list_false_test()")
| reverse_test()		& vcenter(" // reverse_test()")
| delete_test()			& vcenter(" // delete_test()")
| select_test()			& vcenter(" // select_test()")
| flat_test()			& vcenter(" // flat_test()")
| sort_test()			& vcenter(" // sort_test()")
| args_to_list_test()	& vcenter(" // args_to_list_test()")
| list_to_args_test()	& vcenter(" // list_to_args_test()")
;

list_explanation() =
  "This is '$RCSfile: list,v $ $Revision: 1.1.1.1 $', based on '" & list_version() & "'.";

list_main() = list_explanation() | all_list_tests();
list_main(...) -> list_main();
