1:- module(test, 2 [ test/0, 3 test/1, 4 test/2 5 ]). 6:- use_module(library(debug)). 7:- use_module(library(debug)). 8:- asserta(user:file_search_path(foreign, '../sgml')). 9:- asserta(user:file_search_path(library, '../sgml')). 10:- asserta(user:file_search_path(foreign, '../clib')). 11:- asserta(user:file_search_path(library, '../clib')). 12:- asserta(user:file_search_path(library, '../RDF')). 13:- asserta(user:file_search_path(foreign, '.')). 14:- use_module(rdf_db). 15 16:- dynamic 17 map/1, % the literal map 18 map/2, % Prolog shadow admin 19 in/1, % Read generated random 20 out/1. % Write generated random 21 22test :- 23 test(10000), 24 format('~NLiteral map tests passed~n'). 25 26test(N, log(File)) :- 27 open(File, write, Out), 28 assert(out(Out)), 29 call_cleanup(test(N), 30 ( close(Out), 31 retractall(out(_)))). 32test(N, from(File)) :- 33 open(File, read, In), 34 assert(in(In)), 35 call_cleanup(test(N), 36 ( close(In), 37 retractall(in(_)))). 38 39test(N) :- 40 mk(N), 41 ( v(continue), 42 vk(all), 43 vk(prefix('1')), 44 vk(ge(500)), 45 vk(le(500)), 46 vk(between(100, 500)) 47 -> clear 48 ). 49 50clear :- 51 ( retract(map(Map)) 52 -> rdf_destroy_literal_map(Map) 53 ; true 54 ), 55 retractall(map(_,_)). 56 57mk(N) :- 58 clear, 59 rdf_new_literal_map(Map), 60 assert(map(Map)), 61 forall(between(1, N, _), m1(Map)). 62 63m1(Map) :- 64 rnd_value(1000, Key), 65 rnd_value(100, Value), 66 ( random(3, 0) 67 -> ( retract(map(Key, Value)) 68 -> debug(delete, 'Deleted ~q --> ~q', [Key, Value]), 69 rdf_delete_literal_map(Map, Key, Value) 70 ; true 71 ) 72 ; ( map(Key, Value) 73 -> true 74 ; assert(map(Key, Value)) 75 ), 76 rdf_insert_literal_map(Map, Key, Value) 77 ). 78 79rnd_value(Max, Value) :- 80 random(Max, ValueI), 81 ( random(2, 0) 82 -> atom_number(Value, ValueI) 83 ; Value = ValueI 84 ). 85 86v(Stop) :- 87 setof(X, Y^map(X, Y), Xs), 88 forall(member(X, Xs), 89 v(X, Stop)). 90 91v(Key, Stop) :- 92 map(Map), 93 findall(V, map(Key, V), Vs), 94 sort(Vs, VsS), 95 rdf_find_literal_map(Map, [Key], Vs2), 96 sort(Vs2, Vs2S), 97 ( Vs2S == VsS 98 -> true 99 ; format('~q: ~q (must be ~q)~n', [Key, Vs2S, VsS]), 100 Stop == continue 101 ). 102 103vk(all) :- 104 map(Map), 105 rdf_keys_in_literal_map(Map, all, Keys), 106 setof(X, Y^map(X, Y), Xs), 107 ( Xs == Keys 108 -> true 109 ). 110vk(prefix(Prefix)) :- 111 map(Map), 112 rdf_keys_in_literal_map(Map, prefix(Prefix), Keys), 113 prefix_keys(Prefix, KeysOK), 114 ( KeysOK == Keys 115 -> true 116 ; format('prefix(~w): ~p (must be ~p)~n', [Prefix, Keys, KeysOK]) 117 ). 118vk(ge(Min)) :- 119 map(Map), 120 rdf_keys_in_literal_map(Map, ge(Min), Keys), 121 between_keys(Min, 0x5fffffff, KeysOK), 122 ( KeysOK == Keys 123 -> true 124 ; format('ge(~w): ~p (must be ~p)~n', [Min, Keys, KeysOK]) 125 ). 126vk(le(Max)) :- 127 map(Map), 128 rdf_keys_in_literal_map(Map, le(Max), Keys), 129 between_keys(-0x60000000, Max, KeysOK), 130 ( KeysOK == Keys 131 -> true 132 ; format('le(~w): ~p (must be ~p)~n', [Max, Keys, KeysOK]) 133 ). 134vk(between(Min, Max)) :- 135 map(Map), 136 rdf_keys_in_literal_map(Map, between(Min, Max), Keys), 137 between_keys(Min, Max, KeysOK), 138 ( KeysOK == Keys 139 -> true 140 ; format('between(~w, ~w): ~p (must be ~p)~n', 141 [Min, Max, Keys, KeysOK]) 142 ). 143 144prefix_keys(Prefix, Keys) :- 145 findall(K, prefix_key(Prefix, K), Keys0), 146 sort(Keys0, Keys). 147 148prefix_key(Prefix, Key) :- 149 map(Key,_), 150 atom(Key), 151 sub_atom(Key, 0, _, _, Prefix). 152 153between_keys(Min, Max, Keys) :- 154 findall(K, between_key(Min, Max, K), Keys0), 155 sort(Keys0, Keys). 156 157between_key(Min, Max, Key) :- 158 map(Key,_), 159 integer(Key), 160 between(Min, Max, Key). 161 162 163random(Max, Value) :- 164 in(Stream), !, 165 read(Stream, Term), 166 assertion(Term \== end_of_file), 167 Term = xx(Max0, Value), 168 assertion(Max == Max0). 169random(Max, Value) :- 170 out(Stream), !, 171 Value0 is random(Max), 172 format(Stream, 'xx(~q, ~q).~n', [Max, Value0]), 173 Value = Value0. 174random(Max, Value) :- 175 Value is random(Max). 176 177