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).