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