diff --git a/opam-0install-cudf.opam b/opam-0install-cudf.opam index 9cf1621..ab00cbe 100644 --- a/opam-0install-cudf.opam +++ b/opam-0install-cudf.opam @@ -25,6 +25,7 @@ depends: [ "cudf" {>= "0.10"} "ocaml" {>= "4.08.0"} "0install-solver" {>= "2.18"} + "alcotest" {with-test} ] build: ["dune" "build" "-p" name "-j" jobs] run-test: ["dune" "test" "-p" name "-j" jobs] diff --git a/test/cudf/dune b/test/cudf/dune new file mode 100644 index 0000000..beefe6b --- /dev/null +++ b/test/cudf/dune @@ -0,0 +1,4 @@ +(test + (name test) + (package opam-0install-cudf) + (libraries alcotest opam-0install-cudf)) diff --git a/test/cudf/test.ml b/test/cudf/test.ml new file mode 100644 index 0000000..323aea8 --- /dev/null +++ b/test/cudf/test.ml @@ -0,0 +1,87 @@ +let universe = + Cudf.load_universe [ + {Cudf.default_package with package = "a"; version = 1}; + {Cudf.default_package with package = "a"; version = 2}; + {Cudf.default_package with package = "a"; version = 3}; + {Cudf.default_package with package = "a"; version = 4}; + + {Cudf.default_package with package = "b"; version = 1}; + {Cudf.default_package with package = "b"; version = 2; pkg_extra = [("avoid-version", `Int 1)]}; + {Cudf.default_package with package = "b"; version = 3; pkg_extra = [("avoid-version", `Int 0)]}; + {Cudf.default_package with package = "b"; version = 4}; + + {Cudf.default_package with package = "c"; version = 1; pkg_extra = [("avoid-version", `Int 1)]}; + {Cudf.default_package with package = "c"; version = 2}; + {Cudf.default_package with package = "c"; version = 3}; + {Cudf.default_package with package = "c"; version = 4; pkg_extra = [("avoid-version", `Int 0)]}; + + {Cudf.default_package with package = "d"; version = 1; pkg_extra = [("avoid-version", `Int 0)]}; + {Cudf.default_package with package = "d"; version = 2}; + {Cudf.default_package with package = "d"; version = 3}; + {Cudf.default_package with package = "d"; version = 4; pkg_extra = [("avoid-version", `Int 1)]}; + ] + +let solve ?prefer_oldest req = + let x = Opam_0install_cudf.create ?prefer_oldest ~constraints:[] universe in + match Opam_0install_cudf.solve x req with + | Ok sel -> Ok (Opam_0install_cudf.packages_of_result sel) + | Error diag -> Error (Opam_0install_cudf.diagnostics ~verbose:true diag) + +let simple_solve () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("a", 4)]) + (solve [("a", `Essential)]) + +let simple_oldest () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("a", 1)]) + (solve ~prefer_oldest:true [("a", `Essential)]) + +let simple_avoid_1 () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("b", 4)]) + (solve [("b", `Essential)]) + +let oldest_avoid_1 () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("b", 1)]) + (solve ~prefer_oldest:true [("b", `Essential)]) + +let simple_avoid_2 () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("c", 4)]) + (solve [("c", `Essential)]) + +let oldest_avoid_2 () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("c", 2)]) + (solve ~prefer_oldest:true [("c", `Essential)]) + +let simple_avoid_3 () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("d", 3)]) + (solve [("d", `Essential)]) + +let oldest_avoid_3 () = + Alcotest.(check (result (list (pair string int)) string)) + "equal" (Ok [("d", 1)]) + (solve ~prefer_oldest:true [("d", `Essential)]) + +let () = + Alcotest.run "cudf" + [ + ( "simple solve", + [ + Alcotest.test_case "normal" `Quick simple_solve; + Alcotest.test_case "oldest" `Quick simple_oldest; + ] ); + ( "avoid-version", + [ + Alcotest.test_case "normal 1" `Quick simple_avoid_1; + Alcotest.test_case "oldest 1" `Quick oldest_avoid_2; + Alcotest.test_case "normal 2" `Quick simple_avoid_2; + Alcotest.test_case "oldest 2" `Quick oldest_avoid_2; + Alcotest.test_case "normal 3" `Quick simple_avoid_3; + Alcotest.test_case "oldest 3" `Quick oldest_avoid_3; + ] ); + ]