File: map.elpi

package info (click to toggle)
elpi 2.0.7-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 50,296 kB
  • sloc: ml: 18,791; makefile: 229; python: 95; sh: 7
file content (31 lines) | stat: -rw-r--r-- 830 bytes parent folder | download | duplicates (2)
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.