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 "@[ 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; ]