2026-02-23 14:25:03 +00:00
open Tests_f
open Synthesizer
open Relational
(* type tests *)
2026-03-07 22:27:05 +00:00
let % expect_test " Tag type test " = print_endline ( Tag . Test . test () ) ; [ % expect { | [ Tag ( Rd , NWr , Ref , In , NOut ) ] | } ]
2026-02-23 14:25:03 +00:00
let % expect_test " Stmt type test (1) " = print_endline ( Stmt . Test . test1 () ) ; [ % expect { | [ [ S ( S ( O ) ) ] ] | } ]
let % expect_test " Stmt type test (2) " = print_endline ( Stmt . Test . test2 () ) ; [ % expect { | [ Call ( S ( O ) , [ S ( S ( O ) ) ] ) ] | } ]
2026-03-07 22:27:05 +00:00
let % expect_test " FunDecl type test " = print_endline ( FunDecl . Test . test () ) ; [ % expect { | [ FunDecl ( [ Tag ( Rd , Wr , Ref , In , NOut ) ; Tag ( Rd , Wr , Val , In , NOut ) ] , [ Call ( S ( O ) , [ O ] ) ; Write ( S ( O ) ) ] ) ] | } ]
let % expect_test " Prog type test " = print_endline ( Prog . Test . test () ) ; [ % expect { | [ Prog ( [] , FunDecl ( [ Tag ( Rd , NWr , Val , In , NOut ) ] , [ Write ( O ) ; Read ( O ) ] ) ) ] | } ]
2026-02-23 14:25:03 +00:00
let % expect_test " Arg type test " = print_endline ( Arg . Test . test () ) ; [ % expect { | [ LValue ( S ( S ( S ( O ) ) ) ) ] | } ]
let % expect_test " Value type test " = print_endline ( Value . Test . test () ) ; [ % expect { | [ Bot ; Unit ] | } ]
2026-03-07 22:27:05 +00:00
let % expect_test " St type test " = print_endline ( St . Test . test () ) ; [ % expect { | [ St ( [ ( O , ( Tag ( Rd , Wr , Val , In , NOut ) , O ) ) ] , [ Bot ] , S ( O ) , [ O ] ) ] | } ]
2026-02-23 14:25:03 +00:00
(* function tests *)
let % expect_test " inv_id test 1 " = print_endline ( inv_id_t () ) ; [ % expect { | [ O ] | } ]
let % expect_test " inv_id test 2 " = print_endline ( inv_id_t2 () ) ; [ % expect { | [ S ( O ) ] | } ]
let % expect_test " inv_id test 3 " = print_endline ( inv_id_t3 () ) ; [ % expect { | [ S ( O ) ] | } ]
let % expect_test " list_drop test " = print_endline ( list_drop_t () ) ; [ % expect { | [ [ S ( S ( S ( O ) ) ) ] ] | } ]
let % expect_test " list_replace test " = print_endline ( list_replace_t () ) ; [ % expect { | [ [ S ( O ) ; O ; S ( S ( S ( O ) ) ) ; S ( S ( S ( S ( O ) ) ) ) ] ] | } ]
let % expect_test " arG_to_value test 1 " = print_endline ( arg_to_value_t () ) ; [ % expect { | [ Unit ] | } ]
2026-03-07 22:27:05 +00:00
let % expect_test " st_add_arg test " = print_endline ( st_add_arg_t () ) ; [ % expect { | [ St ( [ ( O , ( Tag ( Rd , Wr , Val , In , NOut ) , O ) ) ] , [ Unit ] , S ( O ) , [] ) ; St ( [ ( O , ( Tag ( Rd , Wr , Val , In , NOut ) , O ) ) ] , [ Unit ] , S ( O ) , [] ) ] | } ]
let % expect_test " write eval test 1 " = print_endline ( write_eval_t1 () ) ; [ % expect { | [ St ( [ ( S ( O ) , ( Tag ( NRd , Wr , Ref , In , NOut ) , S ( O ) ) ) ; ( O , ( Tag ( NRd , Wr , Ref , In , NOut ) , O ) ) ] , [ Bot ; Unit ] , S ( S ( O ) ) , [] ) ] | } ]
let % expect_test " write eval test 2 " = print_endline ( write_eval_t2 () ) ; [ % expect { | [ St ( [ ( S ( O ) , ( Tag ( NRd , Wr , Ref , In , NOut ) , S ( O ) ) ) ; ( O , ( Tag ( NRd , Wr , Ref , In , NOut ) , O ) ) ] , [ Unit ; Bot ] , S ( S ( O ) ) , [] ) ] | } ]
let % expect_test " multiple writes eval test " = print_endline ( writes_eval_t () ) ; [ % expect { | [ St ( [ ( S ( O ) , ( Tag ( NRd , Wr , Ref , In , NOut ) , S ( O ) ) ) ; ( O , ( Tag ( NRd , Wr , Ref , In , NOut ) , O ) ) ] , [ Unit ; Unit ] , S ( S ( O ) ) , [] ) ] | } ]
(* let%expect_test "call eval test 1" = print_endline ( call_eval_t1 ( ) ) ; [%expect {| [St ( [ ( O, ( Tag ( NRd, Wr, Ref, In, NOut ) , O ) ) ], [Bot], S ( O ) , [] ) ] |}] *) (* FIXME *)
(* let%expect_test "call eval test 2" = print_endline ( call_eval_t2 ( ) ) ; [%expect {| [St ( [ ( S ( O ) , ( Tag ( NRd, Wr, Ref, In, NOut ) , S ( O ) ) ) ; ( O, ( Tag ( NRd, Wr, Ref, In, NOut ) , O ) ) ], [Unit; Bot], S ( S ( O ) ) , [] ) ] |}] *) (* FIXME *)
(* let%expect_test "call eval test 3" = print_endline ( call_eval_t3 ( ) ) ; [%expect {| [St ( [ ( S ( O ) , ( Tag ( NRd, Wr, Ref, In, NOut ) , S ( O ) ) ) ; ( O, ( Tag ( NRd, Wr, Ref, In, NOut ) , O ) ) ], [Bot; Unit], S ( S ( O ) ) , [] ) ] |}] *) (* FIXME *)
(* let%expect_test "call eval test 4" = print_endline ( call_eval_t4 ( ) ) ; [%expect {| [St ( [ ( S ( O ) , ( Tag ( NRd, Wr, Ref, In, NOut ) , S ( O ) ) ) ; ( O, ( Tag ( NRd, Wr, Ref, In, NOut ) , O ) ) ], [Bot; Bot], S ( S ( O ) ) , [] ) ] |}] *) (* FIXME *)
(* let%expect_test "call eval test 5" = print_endline ( call_eval_t5 ( ) ) ; [%expect {| [St ( [ ( S ( O ) , ( Tag ( NRd, Wr, Ref, In, NOut ) , S ( O ) ) ) ; ( O, ( Tag ( NRd, Wr, Ref, In, NOut ) , O ) ) ], [Bot; Bot], S ( S ( O ) ) , [] ) ] |}] *) (* FIXME *)
let % expect_test " mem_set test 1 " = print_endline ( mem_set_t1 () ) ; [ % expect { | [ St ( [ ( O , ( Tag ( NRd , Wr , Ref , In , NOut ) , O ) ) ] , [ Unit ] , S ( O ) , [] ) ] | } ]
let % expect_test " mem_set test 2 " = print_endline ( mem_set_t2 () ) ; [ % expect { | [ St ( [ ( O , ( Tag ( NRd , Wr , Ref , In , NOut ) , O ) ) ] , [ Bot ] , S ( O ) , [] ) ] | } ]
let % expect_test " mem_set test 3 " = print_endline ( meem_set_t3 () ) ; [ % expect { | [ St ( [ ( O , ( Tag ( NRd , Wr , Ref , In , NOut ) , S ( O ) ) ) ] , [ Bot ; Unit ] , S ( S ( O ) ) , [] ) ] | } ]
(* let%expect_test "add_arg_folder test" = print_endline ( add_arg_folder_t ( ) ) ; [%expect {| [St ( [ ( O, ( Tag ( NRd, Wr, Ref, In, NOut ) , O ) ) ], [Unit], S ( O ) , [] ) ] |}] *) (* FIXME *)
let % expect_test " foldl2 test " = print_endline ( foldl2_t () ) ; [ % expect { | [ St ( [ ( O , ( Tag ( Rd , Wr , Val , In , NOut ) , O ) ) ] , [ Unit ] , S ( O ) , [] ) ; St ( [ ( O , ( Tag ( Rd , Wr , Val , In , NOut ) , O ) ) ] , [ Unit ] , S ( O ) , [] ) ] | } ]
2026-02-23 14:25:03 +00:00
let % expect_test " rvalue test " = print_endline ( rvalue_t () ) ; [ % expect { | [ [] ; [ RValue ] ; [ RValue ; RValue ] ] | } ]
let % expect_test " empty_state test " = print_endline ( empty_state_t () ) ; [ % expect { | [ St ( [] , [] , O , [] ) ] | } ]
let % expect_test " function eval test 1 " = print_endline ( fun_eval_t1 () ) ; [ % expect { | [ St ( [] , [] , O , [] ) ] | } ]
2026-03-07 22:27:05 +00:00
(* let%expect_test "function eval test 2" = print_endline ( fun_eval_t2 ( ) ) ; [%expect {| [St ( [], [], O, [] ) ] |}] *) (* FIXME *)
2026-02-23 14:25:03 +00:00
let % expect_test " function eval test 3 " = print_endline ( fun_eval_t3 () ) ; [ % expect { | [] | } ]
let % expect_test " function eval test 4 " = print_endline ( fun_eval_t4 () ) ; [ % expect { | [] | } ]
let % expect_test " function eval test 5 " = print_endline ( fun_eval_t5 () ) ; [ % expect { | [] | } ]
2026-03-07 22:27:05 +00:00
(* let%expect_test "prog eval test 1" = print_endline ( prog_eval_t1 ( ) ) ; [%expect {| [St ( [], [], O, [] ) ] |}] *) (* FIXME *)
(* let%expect_test "prog eval test 2" = print_endline ( prog_eval_t2 ( ) ) ; [%expect {| [St ( [], [], O, [] ) ] |}] *) (* FIXME *)
(* let%expect_test "prog eval test 3" = print_endline ( prog_eval_t3 ( ) ) ; [%expect {| [St ( [], [], O, [] ) ] |}] *) (* FIXME *)
2026-02-23 14:25:03 +00:00
let % expect_test " prog eval test 4 " = print_endline ( prog_eval_t4 () ) ; [ % expect { | [] | } ]
2026-03-07 22:27:05 +00:00
(* let%expect_test "synthesis test 1" = print_endline ( synt_t1 ( ) ) ; [%expect {| [Val] |}] (* FIXME *) *)
(* let%expect_test "synthesis test 2" = print_endline ( synt_t2 ( ) ) ; [%expect {| [Ref; Val] |}] *) (* FIXME *)
(* let%expect_test "synthesis test 3" = print_endline ( synt_t3 ( ) ) ; [%expect {| [[Ref; Val]; [Val; Val]] |}] *) (* FIXME *)
(* let%expect_test "synthesis test 4" = print_endline ( synt_t4 ( ) ) ; [%expect {| [[Val]] |}] (* FIXME *) *)
(* let%expect_test "synthesis test 5" = print_endline ( synt_t5 ( ) ) ; [%expect {| [[Ref; Ref]; [Ref; Val]; [Val; Ref]; [Val; Val]] |}] *)
(* let%expect_test "synthesis test 6" = print_endline ( synt_t6 ( ) ) ; [%expect {| [[Ref; Ref]; [Val; Ref]; [Ref; Val]; [Val; Val]] |}] *)
(* let%expect_test "synthesis test 7" = print_endline ( synt_t7 ( ) ) ; [%expect {| [[Ref; Val]; [Val; Val]] |}] *)
(* let%expect_test "synthesis test 8" = print_endline ( synt_t8 ( ) ) ; [%expect {| [[Val; Ref]; [Val; Val]] |}] *)
(* let%expect_test "synthesis test 9" = print_endline ( synt_t9 ( ) ) ; [%expect {| [[Val; Ref]; [Val; Val]] |}] *)
2026-02-23 14:25:03 +00:00
(* NOTE: inf test in current model ( without additional functional interfaces and ) *)
(* let%expect_test "recursive eval test" = print_endline ( rec_eval_t ( ) ) ; [%expect {| [St ( [], [], O, [] ) ] |}] *)