1:- module(test_mc,
2 [test_mc/0,test_mc_rev/0]). 3:- use_module(library(plunit)). 4
5:-set_random(seed(100)). 6:-use_module(library(cplint_test/cplint_test)). 7
8test_list([
9 coinmsw_mc,
10 coinmsw_mc_memo,
11 binomial,
12 binomial_user,
13 coinmc,
14 threesideddicemc,
15 markov_chain,
16 prefix,
17 pre_plcg,
18 pctl_slep,
19 arithm,
20 gaussian_mixture,
21 kalman_filter,
22 gauss_mean_est,
23 gauss_mean_est_user,
24 slp_pdcg,
25 indian_gpa,
26 indian_gpadc,
27 nballs,
28 nballsdc,
29 simpsonmc,
30 viralmc,
31 uwcsemc,
32 bitcoin_attack,
33 bitcoin_two_phase,
34 lda,
35 ship,
36 fruit,
37 multinomial
38 ]).
39
40test_mc:-
41 test_list(L),
42 run_tests(L).
43
44test_mc_rev:-
45 test_list(L),
46 reverse(L,Rev),
47 run_tests(Rev).
48
49
50:- begin_tests(coinmc, []). 51
52:-ensure_loaded(library(examples/coinmc)). 53
54test(heads):-
55 run((
56 mc_sample(heads(coin),1000,P),
57 close_to(P,0.51))).
58
59test(tails):-
60 run((
61 mc_sample(tails(coin),1000,P),
62 close_to(P,0.49)
63 )).
64
65test(tails_o):-
66 run((
67 mc_sample(tails(coin),1000,P,[successes(S),failures(F),bar(B)]),
68 close_to(P,0.49), close_to(S,490,50), close_to(F,510,50), is_dict(B,c3)
69 )).
70
71:- end_tests(coinmc). 72
73:- begin_tests(threesideddicemc, []). 74
75:-ensure_loaded(library(examples/threesideddicemc)). 76
77test(on_0_1):-
78 run((mc_sample(on(0,1),1000,P),close_to(P,0.333333333333333))).
79test(on_1_1):-
80 run((mc_sample(on(1,1),1000,P),close_to(P,0.222222222222222))).
81test(on_2_1):-
82 run((mc_sample(on(2,1),1000,P),close_to(P,0.148148147703704))).
83test(on_2_1__on_1_1_mh):-
84 run((mc_mh_sample(on(2,1),on(1,1),1000,P,[mix(1000)]),close_to(P,0.333333333333333))).
85test(on_2_1__on_0_1_mh):-
86 run((mc_mh_sample(on(2,1),on(0,1),1000,P,[mix(1000)]),close_to(P,0.222222222222222))).
87
88
89test(on_0_1_g):-
90 run((mc_gibbs_sample(on(0,1),1000,P),close_to(P,0.333333333333333))).
91test(on_1_1_g):-
92 run((mc_gibbs_sample(on(1,1),1000,P),close_to(P,0.222222222222222))).
93test(on_2_1_g):-
94 run((mc_gibbs_sample(on(2,1),1000,P),close_to(P,0.148148147703704))).
95
96test(on_2_1_g_m):-
97 run((mc_gibbs_sample(on(2,1),1000,P,[mix(100)]),close_to(P,0.148148147703704))).
98
99test(on_2_1_g_m_b):-
100 run((mc_gibbs_sample(on(2,1),1000,P,[mix(100),block(2)]),close_to(P,0.148148147703704))).
101
102test(on_2_1__on_1_1_g):-
103 run((mc_gibbs_sample(on(2,1),on(1,1),1000,P,[mix(1000)]),close_to(P,0.333333333333333))).
104test(on_2_1__on_0_1_g):-
105 run((mc_gibbs_sample(on(2,1),on(0,1),1000,P,[mix(1000)]),close_to(P,0.222222222222222))).
106
107test(on_2_1__on_0_1_g_b):-
108 run((mc_gibbs_sample(on(2,1),on(0,1),1000,P,[mix(1000),block(2)]),close_to(P,0.222222222222222))).
109
110:- end_tests(threesideddicemc). 111
112:- begin_tests(markov_chain, []). 113
114:-ensure_loaded(library(examples/markov_chain)). 115
116test(reach_s0_0_s0):-
117 run((mc_sample(reach(s0,0,s0),1000,P),close_to(P,1))).
118test(reach_s0_0_s1):-
119 run((mc_sample(reach(s0,0,s1),1000,P),close_to(P,0.5984054054054054))).
120test(reach_s0_0_s2):-
121 run((mc_sample(reach(s0,0,s2),1000,P),close_to(P,0.4025135135135135))).
122test(reach_s0_0_s3):-
123 run((mc_sample(reach(s0,0,s3),1000,P),close_to(P,0.5998378378378378))).
124test(reach_s0_0_s4):-
125 run((mc_sample(reach(s0,0,s4),1000,P),close_to(P,0.49948717948717947))).
126test(reach_s1_0_s0):-
127 run((mc_sample(reach(s1,0,s0),1000,P),close_to(P,0))).
128test(reach_s0_0_S_s0):-
129 run((mc_sample_arg(reach(s0,0,S),50,S,Values),\+ member([s0]-_,Values))).
130test(reach_s0_0_S_s0_mh):-
131 run((mc_mh_sample_arg(reach(s0,0,S),reach(s0,0,s1),50,S,Values),\+ member([s0]-_,Values))).
132test(reach_s0_0_S_s0_g):-
133 run((mc_gibbs_sample_arg(reach(s0,0,S),50,S,Values),\+ member([s0]-_,Values))).
134test(reach_s0_0_S_s0_gibbs):-
135 run((mc_gibbs_sample_arg(reach(s0,0,S),reach(s0,0,s1),50,S,Values,[mix(100)]),\+ member([s0]-_,Values))).
136
137test(reach_s0_0_S_s0_b):-
138 run((mc_gibbs_sample_arg(reach(s0,0,S),reach(s0,0,s1),50,S,Values,[mix(100),block(2)]),\+ member([s0]-_,Values))).
139
140test(reach_s0_0_s0_s3_s2,[nondet]):-
141 run((mc_sample_arg_first(reach(s0,0,S),50,S,Values),member(s3-_,Values),member(s2-_,Values))).
142test(reach_s0_0_S_s0_o):-
143 run((mc_sample_arg(reach(s0,0,S),50,S,Values,[bar(B)]),\+ member([s0]-_,Values),is_dict(B,c3))).
144test(reach_s0_0_s0_s3_s2_o,[nondet]):-
145 run((mc_sample_arg_first(reach(s0,0,S),50,S,Values,[bar(B)]),member(s3-_,Values),member(s2-_,Values),is_dict(B,c3))).
146:- end_tests(markov_chain). 147
148:- begin_tests(prefix, []). 149
150:-ensure_loaded(library(examples/prefix)). 151
152test(pre_cfg_a):-
153 run((mc_sample(pre_pcfg([a]),1000,P),close_to(P,0.5))).
154test(pre_cfg_a_b):-
155 run((mc_sample(pre_pcfg([a,b]),1000,P),close_to(P,0.09692857142857143))).
156test(pre_cfg_b):-
157 run((mc_sample(pre_pcfg([b]),1000,P),close_to(P,0.5))).
158test(pre_cfg_a_b_a):-
159 run((mc_sample(pre_pcfg([a,b,a]),1000,P),close_to(P,0.03))).
160test(pre_cfg_b_a):-
161 run((mc_sample(pre_pcfg([b,a]),1000,P),close_to(P,0.1014))).
162
163:- end_tests(prefix). 164
165:- begin_tests(pre_plcg, []). 166
167:-ensure_loaded(library(examples/pre_plcg)). 168test(pre_plc_a_b):-
169 run((mc_sample(pre_plc([a,b]),1000,P),close_to(P,0.0326))).
170:- end_tests(pre_plcg). 171
172:- begin_tests(pctl_slep, []). 173
174:-ensure_loaded(library(examples/pctl_slep)). 175test(eventually_elect):-
176 run((mc_sample(eventually(elect),100,P),close_to(P,1))).
177test(bounded_eventually_elect):-
178 run((mc_sample(bounded_eventually(elect,3),100,P),close_to(P,0.97))).
179test(exp_eventually_elect):-
180 run((mc_expectation(eventually(elect,T),100,T,P),relatively_close_to(P,1.33))).
181:- end_tests(pctl_slep). 182
183:- begin_tests(arithm, []). 184
185:-ensure_loaded(library(examples/arithm)). 186
187test(eval_1_3):-
188 run((mc_mh_sample(eval(2,4),eval(1,3),500,P),close_to(P,0.1151,0.4))).
189test(eval_1_3_o):-
190 run((mc_mh_sample(eval(2,4),eval(1,3),500,P,[mix(10),lag(2),successes(S),failures(F)]),
191 close_to(P,0.1151,0.4),close_to(S,51,100),close_to(F,449,100))).
192test(eval_0_2_1_3):-
193 run((mc_mh_sample(eval(2,4),(eval(0,2),eval(1,3)),200,P),close_to(P,1))).
196test(exp_eval_2):-
197 run((mc_expectation(eval(2,Y),100,Y,E),relatively_close_to(E,3.968,1))).
198test(exp_eval_2_eval_1_3):-
199 run((mc_mh_expectation(eval(2,Y),eval(1,3),300,Y,E),relatively_close_to(E,2.855,1))).
200test(exp_eval_2_eval_1_3_o):-
201 run((mc_mh_expectation(eval(2,Y),eval(1,3),300,Y,E,[mix(10),lag(2)]),relatively_close_to(E,2.855,1))).
202
203test(eval_1_3_g):-
204 run((mc_gibbs_sample(eval(2,4),eval(1,3),1000,P,[]),close_to(P,0.4,0.4))).
205test(eval_1_3_g_n):-
206 run((mc_gibbs_sample(eval(2,4),eval(1,3),1000,P,[block(2)]),close_to(P,0.4,0.4))).
207test(eval_1_3_o_g):-
208 run((mc_gibbs_sample(eval(2,4),eval(1,3),500,P,[mix(10),successes(S),failures(F)]),
209 close_to(P,0.1151,0.4),close_to(S,51,150),close_to(F,449,150))).
210test(eval_0_2_1_3_g):-
211 run((mc_gibbs_sample(eval(2,4),(eval(0,2),eval(1,3)),200,P,[]),close_to(P,1))).
212
213test(exp_eval_2_g):-
214 run((mc_gibbs_expectation(eval(2,Y),300,Y,E),relatively_close_to(E,3.968,1))).
215test(exp_eval_2_g_m):-
216 run((mc_gibbs_expectation(eval(2,Y),500,Y,E,[mix(100)]),relatively_close_to(E,3.968,1))).
217test(exp_eval_2_eval_1_3_g):-
218 run((mc_gibbs_expectation(eval(2,Y),eval(1,3),300,Y,E,[]),relatively_close_to(E,2.855,1))).
219test(exp_eval_2_eval_1_3_o_g):-
220 run((mc_gibbs_expectation(eval(2,Y),eval(1,3),300,Y,E,[mix(10)]),relatively_close_to(E,2.855,1))).
221
222test(exp_eval_2_eval_1_3_o_g_b):-
223 run((mc_gibbs_expectation(eval(2,Y),eval(1,3),300,Y,E,[mix(10),block(3)]),relatively_close_to(E,2.855,1))).
224
225:- end_tests(arithm). 226
227:- begin_tests(gaussian_mixture, []). 228
229:-ensure_loaded(library(examples/gaussian_mixture)). 230
231test(mix_X):-
232 run((mc_expectation(mix(X),1000,X,E),relatively_close_to(E,1.9911150139041882,0.2))).
233test(mix_X_heads):-
234 run((mc_mh_expectation(mix(X),heads,1000,X,E),close_to(E,0,1))).
235test(mix_X_mix):-
236 run((mc_mh_expectation(mix(X),(mix(Y),Y>2),1000,X,E),relatively_close_to(E,5.00202846171105,0.25))).
237:- end_tests(gaussian_mixture). 238
239:- begin_tests(kalman_filter, []). 240
241:-ensure_loaded(library(examples/kalman_filter)). 242
243test(exp_kf):-
244 run((mc_expectation(kf(1,_O2,[T]),1000,T,E),close_to(E,0,0.1))).
245test(lw_exp_kf):-
246 run((mc_lw_expectation(kf(1,_O2,T),kf(1,[2.5],_T),3000,T,R),R=[E],relatively_close_to(E,0.6324846033555553,0.2))).
247
248:- end_tests(kalman_filter). 249
250
251:- begin_tests(gauss_mean_est, []). 252
253:-ensure_loaded(library(examples/gauss_mean_est)). 254test(lw_exp_value_0_X):-
255 run((mc_lw_expectation(val(0,X),(val(1,9),val(2,8)),2000,X,E),relatively_close_to(E,7.166960047178755,0.25))).
256test(exp_value_0_X):-
257 run((mc_expectation(val(0,X),2000,X,E),relatively_close_to(E,0.9698875384639362,0.25))).
258test(part_exp_value_0_X):-
259 run((mc_particle_expectation(val(0,X),[val(1,9),val(2,8)],2000,X,E),relatively_close_to(E,7.166960047178755,0.25))).
260:- end_tests(gauss_mean_est). 261
262:- begin_tests(gauss_mean_est_user, []). 263
264:-ensure_loaded(library(examples/gauss_mean_est_user)). 265test(lw_exp_value_0_X):-
266 run((mc_lw_expectation(val(0,X),(val(1,9),val(2,8)),2000,X,E),relatively_close_to(E,7.166960047178755,0.25))).
267test(exp_value_0_X):-
268 run((mc_expectation(val(0,X),2000,X,E),relatively_close_to(E,0.9698875384639362,0.25))).
269test(part_exp_value_0_X):-
270 run((mc_particle_expectation(val(0,X),[val(1,9),val(2,8)],2000,X,E),relatively_close_to(E,7.166960047178755,0.25))).
271:- end_tests(gauss_mean_est_user). 272
273:- begin_tests(slp_pdcg, []). 274
275:-ensure_loaded(library(examples/slp_pdcg)). 276
277test(is_word):-
278 run((mc_sample(is_word,1000,P),close_to(P,0.067222))).
279:- end_tests(slp_pdcg). 280
281:- begin_tests(indian_gpa, []). 282
283:-ensure_loaded(library(examples/indian_gpa)). 284test(nation_a_st):-
285 run((mc_lw_sample(nation(a),student_gpa(4.0),1000,P),close_to(P,1.0))).
286test(nation_a):-
287 run((mc_sample(nation(a),1000,P),close_to(P,0.25))).
288:- end_tests(indian_gpa). 289
290:- begin_tests(indian_gpadc, []). 291
292:-ensure_loaded(library(examples/indian_gpadc)). 293test(nation_a_st):-
294 run((mc_lw_sample(nation(a),student_gpa(4.0),1000,P),close_to(P,1.0))).
295test(nation_a):-
296 run((mc_sample(nation(a),1000,P),close_to(P,0.25))).
297:- end_tests(indian_gpadc). 298
299:- begin_tests(nballs, []). 300
301:-ensure_loaded(library(examples/nballs)). 302test(drawn_1_1):-
303 run((mc_sample(drawn(1,1),1000,P),close_to(P,0.285))).
304test(drawn_1_1_wood):-
305 run((mc_sample((drawn(1,1),material(1,wood)),1000,P),close_to(P,0.086))).
306test(drawn_1_1_wood_black):-
307 run((mc_sample((drawn(1,1),material(1,wood),color(1,black)),1000,P),close_to(P,0.044))).
308:- end_tests(nballs). 309
310:- begin_tests(nballsdc, []). 311
312:-ensure_loaded(library(examples/nballsdc)). 313test(drawn_1_1):-
314 run((mc_sample(drawn(1,1),1000,P),close_to(P,0.285))).
315test(drawn_1_1_wood):-
316 run((mc_sample((drawn(1,1),material(1,wood)),1000,P),close_to(P,0.086))).
317test(drawn_1_1_wood_black):-
318 run((mc_sample((drawn(1,1),material(1,wood),color(1,black)),1000,P),close_to(P,0.044))).
319:- end_tests(nballsdc). 320
321:- begin_tests(simpsonmc, []). 322
323:-ensure_loaded(library(examples/simpsonmc)). 324test(rec_drug):-
325 run((mc_rejection_sample(recovery,drug,500,P),close_to(P,0.5))).
326test(rec_drug_o):-
327 run((mc_rejection_sample(recovery,drug,500,P,[successes(S),failures(F)]),
328 close_to(P,0.5),close_to(S,250,50),close_to(F,250,50))).
329test(rec_n_drug):-
330 run((mc_rejection_sample(recovery,\+ drug,500,P),close_to(P,0.4))).
331test(rec_drug_f):-
332 run((mc_rejection_sample(recovery,(drug,female),500,P),close_to(P,0.2))).
333test(rec_n_drug_f):-
334 run((mc_rejection_sample(recovery,(\+drug,female),500,P),close_to(P,0.3))).
335test(rec_drug_m):-
336 run((mc_rejection_sample(recovery,(drug,\+female),500,P),close_to(P,0.6))).
337test(rec_n_drug_m):-
338 run((mc_rejection_sample(recovery,(\+ drug,\+female),500,P),close_to(P,0.7))).
339test(rec_d_drug):-
340 run((mc_rejection_sample(recovery,do(drug),500,P),close_to(P,0.4))).
341test(rec_d_n_drug):-
342 run((mc_rejection_sample(recovery,do(\+ drug),500,P),close_to(P,0.5))).
343test(rec_d_drug_f):-
344 run((mc_rejection_sample(recovery,(do(drug),female),500,P),close_to(P,0.2))).
345test(rec_d_n_drug_f):-
346 run((mc_rejection_sample(recovery,(do(\+drug),female),500,P),close_to(P,0.3))).
347test(rec_d_drug_m):-
348 run((mc_rejection_sample(recovery,(do(drug),\+ female),500,P),close_to(P,0.6))).
349test(rec_d_n_drug_m):-
350 run((mc_rejection_sample(recovery,(do(\+ drug),\+ female),500,P),close_to(P,0.7))).
351
352test(mh_rec_drug):-
353 run((mc_mh_sample(recovery,drug,500,P,[lag(2)]),close_to(P,0.5,0.15))).
354test(mh_rec_n_drug):-
355 run((mc_mh_sample(recovery,\+ drug,500,P,[lag(2)]),close_to(P,0.4))).
356test(mh_rec_drug_f):-
357 run((mc_mh_sample(recovery,(drug,female),500,P,[lag(2)]),close_to(P,0.2))).
358test(mh_rec_n_drug_f):-
359 run((mc_mh_sample(recovery,(\+drug,female),1000,P,[lag(2)]),close_to(P,0.3))).
360test(mh_rec_drug_m):-
361 run((mc_mh_sample(recovery,(drug,\+female),500,P,[lag(2)]),close_to(P,0.6))).
362test(mh_rec_n_drug_m):-
363 run((mc_mh_sample(recovery,(\+ drug,\+female),500,P,[lag(2)]),close_to(P,0.7))).
364test(mh_rec_d_drug):-
365 run((mc_mh_sample(recovery,do(drug),500,P,[lag(2)]),close_to(P,0.4))).
366test(mh_rec_d_n_drug):-
367 run((mc_mh_sample(recovery,do(\+ drug),500,P,[lag(2)]),close_to(P,0.5))).
368test(mh_rec_d_drug_f):-
369 run((mc_mh_sample(recovery,(do(drug),female),500,P,[lag(2)]),close_to(P,0.2))).
370test(mh_rec_d_n_drug_f):-
371 run((mc_mh_sample(recovery,(do(\+drug),female),500,P,[lag(2)]),close_to(P,0.3))).
372test(mh_rec_d_drug_m):-
373 run((mc_mh_sample(recovery,(do(drug),\+ female),500,P,[lag(2)]),close_to(P,0.6))).
374test(mh_rec_d_n_drug_m):-
375 run((mc_mh_sample(recovery,(do(\+ drug),\+ female),500,P,[lag(2)]),close_to(P,0.7))).
376:- end_tests(simpsonmc). 377
378:- begin_tests(viralmc, []). 379
380:-ensure_loaded(library(examples/viralmc)). 381test(has_2_has_3):-
382 run((mc_rejection_sample(has(2),has(3),500,P),close_to(P,0.4065135474609725,0.1))).
383test(has_2_d_has_3):-
384 run((mc_rejection_sample(has(2),do(has(3)),500,P),close_to(P,0.136))).
385test(mh_has_2_d_has_3):-
386 run((mc_mh_sample(has(2),do(has(3)),500,P),close_to(P,0.136))).
387:- end_tests(viralmc). 388
389:- begin_tests(uwcsemc, []). 390
391:-ensure_loaded(library(examples/uwcsemc)). 392test(taught_by_c1_p1):-
393 run((mc_sample(taught_by(c1,p1),1000,P),close_to(P,0.0926040439925477))).
394:- end_tests(uwcsemc). 395
396:- begin_tests(lda, []). 397
398:-ensure_loaded(library(examples/lda)). 399
400test(topic_1_1_1):-
401 run((mc_sample(topic(1,1,1),400,P),close_to(P,0.5,0.2))).
402test(topic_1_1_1_g):-
403 run((mc_gibbs_sample(topic(1,1,1),400,P),close_to(P,0.5,0.3))).
404
405test(topic_1_1_1_ww):-
406 run((mc_mh_sample(topic(1,1,1),(word(1,1,1),word(1,2,1)),100,G,[]),close_to(G,0.5,0.5))).
407test(topic_1_1_1_ww_g):-
408 run((mc_gibbs_sample(topic(1,1,1),(word(1,1,1),word(1,2,1)),100,G,[]),close_to(G,0.5,0.5))).
409test(topic_1_1_1_ww_g_b):-
410 run((mc_gibbs_sample(topic(1,1,1),(word(1,1,1),word(1,2,1)),100,G,[block(2)]),close_to(G,0.5,0.5))).
411test(topic_1_1_1_ww_g_b_part):-
412run((mc_particle_sample(topic(1,1,1),[word(1,1,1),word(1,2,1)],100,G),close_to(G,0.5,0.5))).
413:- end_tests(lda). 414
415
416:- begin_tests(bitcoin_attack, []). 417
418:-ensure_loaded(library(examples/bitcoin_attack)). 419
420test(poisson):-
421 run((mc_sample(success_poisson,1000,P),close_to(P,0.042))).
422
423test(negative_binomial):-
424 run((mc_sample(success_negative_binomial,1000,P),close_to(P,0.02))).
425
426:- end_tests(bitcoin_attack). 427
428:- begin_tests(bitcoin_two_phase, []). 429
430:-ensure_loaded(library(examples/bitcoin_two_phase)). 431test(a):-
432 run((mc_sample(reach(a0,0,a2),1000,P),close_to(P,0.071))).
433
434test(b):-
435 run((mc_sample(reach(b0,0,b2),1000,P),close_to(P,0.115))).
436
437:- end_tests(bitcoin_two_phase). 438
439:- begin_tests(binomial, []). 440
441:-ensure_loaded(library(examples/binomial)). 442
443test(exp):-
444 run((mc_expectation(a(X),1000,X,E),relatively_close_to(E,10))).
445
446
447:- end_tests(binomial). 448
449:- begin_tests(binomial_user, []). 450
451:-ensure_loaded(library(examples/binomial_user)). 452
453test(exp):-
454 run((mc_expectation(a(X),1000,X,E),relatively_close_to(E,10))).
455
456
457:- end_tests(binomial_user). 458
459:- begin_tests(coinmsw_mc, []). 460
461:-ensure_loaded(library(examples/coinmsw_mc)). 462
463test(mc_sample):-
464 run((mc_sample(res(coin,heads),1000,P),close_to(P,0.51))).
465
466:- end_tests(coinmsw_mc). 467
468
469:- begin_tests(coinmsw_mc_memo, []). 470
471:-ensure_loaded(library(examples/coinmsw_mc_memo)). 472
473test(lw):-
474 run((mc_lw_sample(res(coin,heads),fairness(coin,fair),1000,P),close_to(P,0.5))).
475
476test(mh):-
477 run((mc_mh_sample(res(coin,heads),fairness(coin,fair),200,P,[mix(100),lag(3)]),close_to(P,0.5))).
478
479:- end_tests(coinmsw_mc_memo). 480
481:- begin_tests(ship, []). 482
483:-ensure_loaded(library(examples/ship)). 484
485test(fire):-
486 run((
487 mc_sample(saved,1000,P),
488 close_to(P,0.67))).
489
490:- end_tests(ship). 491
492:- begin_tests(fruit, []). 493
494:-ensure_loaded(library(examples/fruit)). 495
496test(apple):-
497 run((
498 mc_sample(buy(apple),1000,P),
499 close_to(P,0.464))).
500
501test(banana):-
502 run((
503 mc_sample(buy(banana),1000,P),
504 close_to(P,0.162))).
505
506:- end_tests(fruit). 507
508:- begin_tests(multinomial, []). 509
510:-ensure_loaded(library(examples/multinomial)). 511
512test(100):-
513 run((
514 prob_query(100,[0.5,0.25,0.25],P),
515 close_to(P,1))).
516
517
518:- end_tests(multinomial).