297 lines
7.3 KiB
OCaml
297 lines
7.3 KiB
OCaml
open Cards;;
|
|
open Table;;
|
|
open Tcards;;
|
|
open Printer;;
|
|
|
|
let card_tests () =
|
|
let cards = [{seed=Clovers; value=1}; {seed=Hearts; value=1}; {seed=Pikes; value=1}] in
|
|
assert (is_valid cards);
|
|
|
|
let cards = [{seed=Tiles; value=1}; {seed=Clovers; value=1}; {seed=Hearts; value=1}; {seed=Pikes; value=1}] in
|
|
assert (is_valid cards);
|
|
|
|
let cards = [{seed=Tiles; value=2}; {seed=Clovers; value=1}; {seed=Hearts; value=1}; {seed=Pikes; value=1}] in
|
|
assert (not (is_valid cards));
|
|
|
|
let cards = [{seed=Hearts; value=2}; {seed=Hearts; value=2}; {seed=Hearts; value=4}]
|
|
in assert (not (no_double_value cards));
|
|
|
|
let cards = [{seed=Hearts; value=2}; {seed=Hearts; value=2}; {seed=Hearts; value=4}]
|
|
in assert (not (no_double_seed cards));
|
|
|
|
let cards = [{seed=Pikes; value=2}; {seed=Clovers; value=2}; {seed=Tiles; value=4}; {seed=Hearts; value=4}]
|
|
in assert (no_double_seed cards);
|
|
|
|
let cards = [{seed=Hearts; value=4}; {seed=Hearts; value=3}; {seed=Hearts; value=2}; {seed=Hearts; value=1}]
|
|
in assert (is_valid cards);
|
|
|
|
let cards = [{seed=Hearts; value=13}; {seed=Hearts; value=12}; {seed=Hearts; value=2}; {seed=Hearts; value=1}]
|
|
in assert (is_valid cards);
|
|
|
|
let cards = [{seed=Pikes; value=13}; {seed=Hearts; value=12}; {seed=Hearts; value=2}; {seed=Hearts; value=1}]
|
|
in assert (not (is_valid cards));
|
|
|
|
let cards = [{seed=Pikes; value=13}; {seed=Pikes; value=12}; {seed=Pikes; value=1}]
|
|
in assert (is_valid cards);
|
|
let cards = [{seed=Hearts; value=12}; {seed=Pikes; value=12}; {seed=Pikes; value=1}]
|
|
in assert (not (is_valid cards));
|
|
|
|
let cards = [{seed=Hearts; value=13}; {seed=Hearts; value=3}; {seed=Hearts; value=2}; {seed=Hearts; value=1}]
|
|
in assert (is_valid cards);
|
|
|
|
|
|
let () =
|
|
assert ([
|
|
Cards.make Hearts 6;
|
|
Cards.make Hearts 7;
|
|
Cards.make Hearts 8;
|
|
Cards.make Hearts 9;
|
|
Cards.make Hearts 10;]
|
|
|> Cards.is_straight) ;
|
|
|
|
assert ([
|
|
Cards.make Hearts 1;
|
|
Cards.make Hearts 12;
|
|
Cards.make Hearts 2;
|
|
Cards.make Hearts 13;]
|
|
|> Cards.is_straight) ;
|
|
|
|
let ttable = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 7;
|
|
Cards.make Clovers 8;
|
|
Cards.make Clovers 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 7;
|
|
Cards.make Pikes 8;
|
|
Cards.make Pikes 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 7;
|
|
Cards.make Hearts 8;
|
|
Cards.make Hearts 9;
|
|
Cards.make Hearts 10;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 6;
|
|
]
|
|
]
|
|
in
|
|
let neighs = neighbors
|
|
(Tcards.make [
|
|
Cards.make Hearts 7;
|
|
Cards.make Hearts 8;
|
|
Cards.make Hearts 9;
|
|
Cards.make Hearts 10;
|
|
]) ttable in
|
|
assert (neighs = [Cards.make Hearts 6]) ;
|
|
|
|
let ttable = Table.make [
|
|
Tcards.make [
|
|
Cards.make Hearts 1;
|
|
Cards.make Hearts 2;
|
|
Cards.make Hearts 13;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 1;
|
|
Cards.make Pikes 2;
|
|
Cards.make Pikes 3;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 2;
|
|
Cards.make Clovers 3;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 1;
|
|
Cards.make Tiles 1;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 12;
|
|
Cards.make Tiles 12;
|
|
];
|
|
]
|
|
in
|
|
let neighs = neighbors
|
|
(Tcards.make [
|
|
Cards.make Hearts 1;
|
|
Cards.make Hearts 2;
|
|
Cards.make Hearts 13;
|
|
]) ttable in
|
|
assert (neighs = [Cards.make Hearts 12]) ;
|
|
|
|
let table1 = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 2;
|
|
Cards.make Pikes 2;
|
|
Cards.make Hearts 2;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 1;
|
|
Cards.make Tiles 1;
|
|
Cards.make Pikes 1;
|
|
Cards.make Hearts 1;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Tiles 13;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Tiles 12;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 13;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 12;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 3;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 3;
|
|
]
|
|
] in
|
|
let table1x = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 2;
|
|
Cards.make Pikes 2;
|
|
Cards.make Hearts 2;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 1;
|
|
Cards.make Tiles 1;
|
|
Cards.make Pikes 1;
|
|
Cards.make Hearts 1;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Tiles 13;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Tiles 12;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 13;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 12;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 12;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 3;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 3;
|
|
]
|
|
] in
|
|
let table2 = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 2;
|
|
Cards.make Tiles 2;
|
|
Cards.make Pikes 2;
|
|
Cards.make Hearts 2;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 1;
|
|
Cards.make Tiles 1;
|
|
Cards.make Pikes 1;
|
|
Cards.make Hearts 1;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 3;
|
|
]
|
|
] in
|
|
let table3 = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 7;
|
|
Cards.make Clovers 8;
|
|
Cards.make Clovers 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 7;
|
|
Cards.make Hearts 8;
|
|
Cards.make Hearts 9;
|
|
Cards.make Hearts 10;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 7;
|
|
Cards.make Pikes 8;
|
|
Cards.make Pikes 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Tiles 7;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 11;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 12;
|
|
];
|
|
] in
|
|
let table4 = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 7;
|
|
Cards.make Clovers 8;
|
|
Cards.make Clovers 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Pikes 7;
|
|
Cards.make Pikes 8;
|
|
Cards.make Pikes 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 7;
|
|
Cards.make Hearts 8;
|
|
Cards.make Hearts 9;
|
|
Cards.make Hearts 10;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 6;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Hearts 8;
|
|
]
|
|
] in
|
|
let table5 = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 7;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 6;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 8;
|
|
];
|
|
] in
|
|
let table5x = Table.make [
|
|
Tcards.make [
|
|
Cards.make Clovers 7;
|
|
Cards.make Clovers 8;
|
|
Cards.make Clovers 9;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 10;
|
|
];
|
|
Tcards.make [
|
|
Cards.make Clovers 10;
|
|
];
|
|
] in
|
|
|
|
assert (alg table1 void_printer |> snd = 4);
|
|
assert (alg table2 void_printer |> snd = 3);
|
|
assert (alg table3 void_printer |> snd = 4);
|
|
assert (alg table4 void_printer |> snd = 4);
|
|
assert (alg table5 void_printer |> snd = 1);
|
|
assert (alg table5x void_printer |> snd = 0);
|
|
assert (alg table1x void_printer |> snd = 2);
|
|
assert (alg ~maxiter:21 table1x void_printer |> snd = 3);
|
|
assert (alg ~maxiter:14 table1x void_printer |> snd = 2);
|
|
let table = table1x in
|
|
let res = alg ~maxiter:14 table printer in
|
|
Printf.printf "Best result: %d\n%a\n" (res |> snd) print_table (res |> fst) ;
|
|
Printf.printf "Tests done.\n" in
|
|
() ;;
|
|
|
|
|
|
card_tests ();;
|