Newer
Older
Octopus_Carnival / hosaka / tests.ml
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 ();;