10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-06-30 00:44:18 +02:00
QCaml/CI/Determinant.ml

77 lines
1.8 KiB
OCaml
Raw Normal View History

2019-02-15 23:37:52 +01:00
type t =
2018-07-20 19:02:56 +02:00
{
2019-02-15 23:37:52 +01:00
alpha : Spindeterminant.t ;
beta : Spindeterminant.t ;
2018-07-20 19:02:56 +02:00
}
2019-02-15 23:37:52 +01:00
let alpha t = t.alpha
2018-07-20 19:02:56 +02:00
2019-02-15 23:37:52 +01:00
let beta t = t.beta
2018-07-20 19:02:56 +02:00
2019-02-15 23:37:52 +01:00
let phase t =
match Spindeterminant.(phase t.alpha, phase t.beta) with
| Phase.Pos, Phase.Pos
| Phase.Neg, Phase.Neg -> Phase.Pos
| _ -> Phase.Neg
2018-07-20 19:02:56 +02:00
2019-02-15 23:37:52 +01:00
let of_spindeterminants a b =
{
alpha = a ;
beta = b
}
2018-07-20 19:02:56 +02:00
let of_lists a b =
2019-02-15 23:37:52 +01:00
{
alpha = Spindeterminant.of_list a ;
beta = Spindeterminant.of_list b
}
2018-07-20 19:02:56 +02:00
2019-02-15 23:37:52 +01:00
let pp_det ppf t =
Format.fprintf ppf "@[<v> a: %a @; b: %a @]@."
Spindeterminant.pp_spindet t.alpha
Spindeterminant.pp_spindet t.beta
2018-07-20 19:02:56 +02:00
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
2019-02-16 10:09:42 +01:00
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;
2018-07-20 19:02:56 +02:00
in
2019-02-16 10:09:42 +01:00
2018-07-20 19:02:56 +02:00
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
2019-02-16 10:09:42 +01:00
Alcotest.(check bool) "phase" (phase det = Phase.Neg) true;
2018-07-20 19:02:56 +02:00
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
2019-02-16 10:09:42 +01:00
Alcotest.(check bool) "phase" (phase det = Phase.Pos) true;
2018-07-20 19:02:56 +02:00
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
2019-02-16 10:09:42 +01:00
Alcotest.(check bool) "phase" (phase det = Phase.Neg) true;
2018-07-20 19:02:56 +02:00
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
2019-02-16 10:09:42 +01:00
Alcotest.(check bool) "phase" (phase det = Phase.Pos) true;
2018-07-20 19:02:56 +02:00
in
[
"Creation", `Quick, test_creation;
2019-02-16 10:09:42 +01:00
"Phase", `Quick, test_phase;
2018-07-20 19:02:56 +02:00
]