1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
pred build i:int, i:int, i:std.map int int, o:std.map int int.
build N N X X :- !.
build N M X X1 :-
N1 is N + 1,
std.map.add N N X XR,
build N1 M XR X1.
pred test i:int, i:int, i:(int -> A -> int -> prop), i:A.
test N N _ _ :- !.
test N M F X :-
N1 is N + 1,
std.assert! (F N X N) "not found",
test N1 M F X.
pred test2 i:int, i:int, i:(int -> A -> A -> prop), i:A.
test2 N N _ _ :- !.
test2 N M F X :-
N1 is N + 1,
std.assert! (F N X X1) "not found",
test2 N1 M F X1.
macro @iters :- 4096.
main :-
std.time (build 0 @iters {std.map.make cmp_term} T) Time0, !,
std.time (test 0 @iters std.map.find T) Time1, !,
std.map.bindings T B,
std.assert! ({std.length B} = @iters, B = [pr 0 0|_]) "bindings broken", !,
std.time (test2 0 @iters std.map.remove T) Time2, !,
print Time0 "+" Time1 "+" Time2.
|