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))).
  194%test((mc_rejection_sample(eval(2,4),eval(1,3),1000,P),close_to(P,0.1151)),arithm).
  195%test((mc_rejection_sample(eval(2,4),(eval(0,2),eval(1,3)),1000,P),close_to(P,1)),arithm).
  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).