(* -*- tuareg -*- *)

let suffix =
  try
    let major_version = List.hd (String.split_on_char '.' Sys.ocaml_version) in
    if int_of_string major_version < 5 then string_of_int Sys.word_size else "ocaml5"
  with _ -> failwith ("Unknown OCaml version format: " ^ Sys.ocaml_version)

let dune = Printf.sprintf {|
(library
  (name QCheck_tests)
  (modules QCheck_tests)
  (libraries qcheck-core))

(library
  (name QCheck2_tests)
  (modules QCheck2_tests)
  (libraries qcheck-core))

(executable
  (name QCheck_expect_test)
  (modules QCheck_expect_test)
  (libraries qcheck-core qcheck-core.runner QCheck_tests))

(rule
  (targets QCheck_expect_test.out)
  (action
    (with-stdout-to %%{targets}
      (run ./QCheck_expect_test.exe --no-colors -s 1234))))

(rule
  (alias runtest)
  (package qcheck-core)
  (action (diff QCheck_expect_test.expected.%s QCheck_expect_test.out)))

(executable
  (name QCheck2_expect_test)
  (modules QCheck2_expect_test)
  (libraries qcheck-core qcheck-core.runner QCheck2_tests))

(rule
  (targets QCheck2_expect_test.out)
  (action
    (with-stdout-to %%{targets}
      (run ./QCheck2_expect_test.exe --no-colors -s 1234))))

(rule
  (alias runtest)
  (package qcheck-core)
  (action (diff QCheck2_expect_test.expected.%s QCheck2_expect_test.out)))

(tests
  (names QCheck_unit_tests QCheck2_unit_tests)
  (modules QCheck_unit_tests QCheck2_unit_tests)
  (package qcheck-core)
  (libraries qcheck-core alcotest))

(executable
  (name shrink_benchmark)
  (modules shrink_benchmark)
  (libraries qcheck-core qcheck-core.runner QCheck_tests QCheck2_tests))

|} suffix suffix

let () = Jbuild_plugin.V1.send dune
