Files
mercury/tests/general/array_test.m
Andrew Bromage 4d190a1dff Changes to make array_test.m run under NU-Prolog.
Estimated hours taken: 0.5

Changes to make array_test.m run under NU-Prolog.

tests/general/array_test.m:
	Remove one function call (use the predicate version) and
	replace calls to io__write with their typed versions.
1997-08-01 06:22:10 +00:00

147 lines
3.7 KiB
Mathematica

% Some checks of array implementation.
:- module array_test.
:- interface.
:- import_module io.
:- pred main(io__state, io__state).
:- mode main(di, uo) is det.
:- implementation.
:- import_module int, string, list, array, bt_array, std_util.
main -->
test([1,2,3,4,5,6,7,8,9,10]).
:- pred test(list(int), io__state, io__state).
:- mode test(in, di, uo) is det.
test(Xs) -->
{
Cmp = lambda([X :: in, Y :: in, Res :: out] is det,
compare(Res, X, Y)),
array__from_list(Xs, A0),
array__to_list(A0, As0),
array__max(A0, AMax0),
array__min(A0, AMin0),
array__size(A0, ASize),
array__bounds(A0, AMin1, AMax1),
array__bsearch(A0, 4, Cmp, ABsearch),
array__set(A0, 8, 100, A1),
array__to_list(A1, As1),
array__resize(A1, 15, 1000, A2),
array__to_list(A2, As2),
array__shrink(A2, 10, A3),
array__to_list(A3, As3)
},
write_message_int_list("A0: ", As0),
write_message_int("AMax0: ", AMax0),
write_message_int("AMin0: ", AMin0),
write_message_int("ASize: ", ASize),
write_message_int("AMin1: ", AMin1),
write_message_int("AMax1: ", AMax1),
write_message_maybe_int("ABsearch: ", ABsearch),
write_message_int_list("A1: ", As1),
write_message_int_list("A2: ", As2),
write_message_int_list("A3: ", As3),
{
bt_array__from_list(0, Xs, B0),
bt_array__to_list(B0, Bs0),
bt_array__max(B0, BMax0),
bt_array__min(B0, BMin0),
bt_array__size(B0, BSize),
bt_array__bounds(B0, BMin1, BMax1),
( bt_array__bsearch(B0, 4, Cmp, BBsearch0) ->
BBsearch = yes(BBsearch0)
;
BBsearch = no
),
bt_array__set(B0, 8, 100, B1),
bt_array__to_list(B1, Bs1),
bt_array__resize(B1, 0, 14, 1000, B2),
bt_array__to_list(B2, Bs2),
bt_array__shrink(B2, 0, 9, B3),
bt_array__to_list(B3, Bs3)
},
write_message_int_list("B0: ", Bs0),
write_message_int("BMax0: ", BMax0),
write_message_int("BMin0: ", BMin0),
write_message_int("BSize: ", BSize),
write_message_int("BMin1: ", BMin1),
write_message_int("BMax1: ", BMax1),
write_message_maybe_int("BBsearch: ", BBsearch),
write_message_int_list("B1: ", Bs1),
write_message_int_list("B2: ", Bs2),
write_message_int_list("B3: ", Bs3),
% Finally, just in case, compare the two implementations.
(
{
As0 = Bs0,
AMax0 = BMax1,
AMin0 = BMin1,
ASize = BSize,
AMin1 = BMin1,
AMax1 = BMax1,
AMax0 = AMax1, % Sanity check
AMin0 = AMin1, % Sanity check
BMax0 = BMax1, % Sanity check
BMin0 = BMin1, % Sanity check
ABsearch = BBsearch,
As1 = Bs1,
As2 = Bs2,
As3 = Bs3,
As1 = As3, % Sanity check
Bs1 = Bs3 % Sanity check
}
->
io__write_string("Results all match\n")
;
io__write_string("Results don't match\n")
).
:- pred write_message_int(string, int, io__state, io__state).
:- mode write_message_int(in, in, di, uo) is det.
write_message_int(Msg, O) -->
io__write_string(Msg),
io__write_int(O),
io__nl.
:- pred write_message_maybe_int(string, maybe(int), io__state, io__state).
:- mode write_message_maybe_int(in, in, di, uo) is det.
write_message_maybe_int(Msg, no) -->
io__write_string(Msg),
io__write_string("no"),
io__nl.
write_message_maybe_int(Msg, yes(I)) -->
io__write_string(Msg),
io__write_string("yes("),
io__write_int(I),
io__write_string(")"),
io__nl.
:- pred write_message_int_list(string, list(int), io__state, io__state).
:- mode write_message_int_list(in, in, di, uo) is det.
write_message_int_list(Msg, List) -->
io__write_string(Msg),
( { List = [] },
io__write_string("[]")
; { List = [I | Is] },
io__write_char('['),
io__write_int(I),
write_int_list_rest(Is)
),
io__nl.
:- pred write_int_list_rest(list(int), io__state, io__state).
:- mode write_int_list_rest(in, di, uo) is det.
write_int_list_rest([]) -->
io__write_char(']').
write_int_list_rest([I | Is]) -->
io__write_string(", "),
io__write_int(I),
write_int_list_rest(Is).