1:- module(test_viterbi,
    2  [test_viterbi/0]).    3:- use_module(library(plunit)).    4
    5test_viterbi:-
    6  run_tests([
    7    bag_game_vit,
    8    hmm_vit,
    9    coin_vit,
   10    mendel_vit,
   11    eruption_vit
   12  ]).
   13
   14  :-use_module(library(cplint_test/cplint_test)).   15
   16:- begin_tests(eruption_vit, []).   17
   18:-ensure_loaded(library(examples/eruption_vit)).   19
   20test(ev):-
   21  run((viterbi(eruption,P,Exp),close_to(P,0.252),
   22	  perm(Exp,[rule(0, eruption, [eruption:0.6, earthquake:0.3, '':0.10000000000000003], [sudden_energy_release, fault_rupture(southwest_northeast)]), 
   23    rule(1, sudden_energy_release, [sudden_energy_release:0.7, '':0.30000000000000004], []), 
   24    rule(2, fault_rupture(southwest_northeast), [fault_rupture(southwest_northeast):0.6, '':0.4], [])]))).
   25  
   26:- end_tests(eruption_vit).   27
   28
   29:- begin_tests(bag_game_vit, []).   30
   31:-ensure_loaded(library(examples/bag_game_vit)).   32test(win):-
   33  run((viterbi(win,P,Exp),close_to(P,0.36),
   34Exp=[
   35  rule(0, red, [red:0.4, '':0.6], []),
   36  rule(1, green, [green:0.9, '':0.09999999999999998], [])])).
   37
   38:- end_tests(bag_game_vit).   39
   40:- begin_tests(hmm_vit, []).   41
   42:-ensure_loaded(library(examples/hmm_vit)).   43
   44test(a_g_g):-
   45  run((viterbi(hmm1(S,[a,g,g]),P,_Exp),close_to(P,0.000405),
   46  S = [q2, q2, q1]
   47  )).
   48
   49test(a_a_a):-
   50  run((viterbi(hmm1(S,[a,a,a]),P,_Exp),close_to(P,0.0008000000000000003),
   51  S = [q1, q1, q1]
   52  )).
   53
   54:- end_tests(hmm_vit).   55
   56:- begin_tests(coin_vit, []).   57
   58:-ensure_loaded(library(examples/coin_vit)).   59test(h_c):-
   60  run((viterbi(heads(coin),Prob,Exp),close_to(Prob,0.45),
   61Exp = [rule(0, heads(coin), [heads(coin):0.5, tails(coin):0.5], [toss(coin), \+biased(coin)]),
   62	rule(2, fair(coin), [fair(coin):0.9, biased(coin):0.1], [])])).
   63
   64:- end_tests(coin_vit).   65
   66:- begin_tests(mendel_vit, []).   67
   68:-ensure_loaded(library(examples/mendel_vit)).   69test(s_p):-
   70  run((viterbi(color(s,purple),Prob,Exp),close_to(Prob,0.5),
   71	Exp = [rule(0, cg(s, 1, p), [cg(s, 1, p):0.5, cg(s, 1, w):0.5],
   72	 [mother(m, s), cg(m, 1, p), cg(m, 2, w)])])).
   73
   74
   75test(s_w):-
   76  run((viterbi(color(s,white),Prob,Exp),close_to(Prob,0.25),
   77  Exp = [rule(0, cg(s, 1, w), [cg(s, 1, p):0.5, cg(s, 1, w):0.5],
   78     [mother(m, s), cg(m, 1, p), cg(m, 2, w)]),
   79	 rule(1, cg(s, 2, w), [cg(s, 2, w):0.5, cg(s, 2, p):0.5],
   80	   [father(f, s), cg(f, 1, w), cg(f, 2, p)])])).
   81:- end_tests(mendel_vit).