10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-06-26 23:22:07 +02:00
QCaml/CI/Determinant.ml

77 lines
1.8 KiB
OCaml

type t =
{
alpha : Spindeterminant.t ;
beta : Spindeterminant.t ;
}
let alpha t = t.alpha
let beta t = t.beta
let phase t =
match Spindeterminant.(phase t.alpha, phase t.beta) with
| Phase.Pos, Phase.Pos
| Phase.Neg, Phase.Neg -> Phase.Pos
| _ -> Phase.Neg
let of_spindeterminants a b =
{
alpha = a ;
beta = b
}
let of_lists a b =
{
alpha = Spindeterminant.of_list a ;
beta = Spindeterminant.of_list b
}
let pp_det ppf t =
Format.fprintf ppf "@[<v> a: %a @; b: %a @]@."
Spindeterminant.pp_spindet t.alpha
Spindeterminant.pp_spindet t.beta
let test_case () =
let test_creation () =
let l_a = [ 1 ; 2 ; 3 ; 5 ; 64 ]
and l_b = [ 2 ; 3 ; 5 ; 65 ] in
let det = of_lists l_a l_b in
let z_a = alpha det
and z_b = beta det in
Alcotest.(check (list int )) "alpha" (Spindeterminant.to_list z_a) l_a;
Alcotest.(check (list int )) "beta" (Spindeterminant.to_list z_b) l_b;
Alcotest.(check bool) "phase" (phase det = Phase.Pos) true;
in
let test_phase () =
let l_a = [ 1 ; 2 ; 3 ; 64 ; 5 ]
and l_b = [ 2 ; 3 ; 5 ; 65 ] in
let det = of_lists l_a l_b in
Alcotest.(check bool) "phase" (phase det = Phase.Neg) true;
let l_a = [ 1 ; 2 ; 3 ; 64 ; 5 ]
and l_b = [ 3 ; 2 ; 5 ; 65 ] in
let det = of_lists l_a l_b in
Alcotest.(check bool) "phase" (phase det = Phase.Pos) true;
let l_a = [ 1 ; 3 ; 2 ; 64 ; 5 ]
and l_b = [ 3 ; 2 ; 5 ; 65 ] in
let det = of_lists l_a l_b in
Alcotest.(check bool) "phase" (phase det = Phase.Neg) true;
let l_a = [ 1 ; 3 ; 2 ; 64 ; 5 ]
and l_b = [ 3 ; 2 ; 65 ; 5 ] in
let det = of_lists l_a l_b in
Alcotest.(check bool) "phase" (phase det = Phase.Pos) true;
in
[
"Creation", `Quick, test_creation;
"Phase", `Quick, test_phase;
]