mirror of
https://github.com/ProgramSnail/pass_strategy_synthesis.git
synced 2026-06-11 03:38:15 +00:00
struct: synt. argument modes tests
This commit is contained in:
parent
10cea01338
commit
a771173364
2 changed files with 149 additions and 15 deletions
|
|
@ -23,6 +23,19 @@ open Mode
|
|||
|
||||
(* TODO *)
|
||||
|
||||
(* NOTE: redo with fold ?? *)
|
||||
let rec seqo stmts stmt' = ocanren {
|
||||
{ stmts == [] & stmt' == SkipS } |
|
||||
{ fresh s in
|
||||
stmts == [s] &
|
||||
stmt' == s } |
|
||||
{ fresh s, s', ss, stmt_rest' in
|
||||
stmts == s :: s' :: ss &
|
||||
seqo (s' :: ss) stmt_rest' &
|
||||
stmt' == SeqS(s, stmt_rest')
|
||||
}
|
||||
}
|
||||
|
||||
(* - basic var tests *)
|
||||
|
||||
let prog_eval_t_empty _ = show(answer) (Stream.take (run q
|
||||
|
|
@ -104,7 +117,7 @@ let prog_eval_t_simple_var_wr_rd _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_rd _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, fg, xd, fd, st in
|
||||
fresh prog, xg, fg, xd, fd in
|
||||
globals_min_ido xg &
|
||||
fg == Nat.s xg &
|
||||
xd == VarD (UnitT (Rd, NeverWr), UnitE) &
|
||||
|
|
@ -115,7 +128,7 @@ let prog_eval_t_simple_call_rd _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_rd_ref _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -129,7 +142,7 @@ let prog_eval_t_simple_call_rd_ref _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_wr _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -143,7 +156,7 @@ let prog_eval_t_simple_call_wr _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_wr_rd _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -158,7 +171,7 @@ let prog_eval_t_simple_call_wr_rd _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_fbd_wr _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -172,7 +185,7 @@ let prog_eval_t_simple_call_fbd_wr _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_ref_wr _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -186,7 +199,7 @@ let prog_eval_t_simple_call_ref_wr _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_ref_fbd_wr _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -201,7 +214,7 @@ let prog_eval_t_simple_call_ref_fbd_wr _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_simple_call_ref_wr_with_fix _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -217,7 +230,7 @@ let prog_eval_t_simple_call_ref_wr_with_fix _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_call_in_call _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, f2g, xd, yd, fd, f2d, st in
|
||||
fresh prog, xg, yg, fg, f2g, xd, yd, fd, f2d in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -236,7 +249,7 @@ let prog_eval_t_call_in_call _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_fix_call_after_call _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, f2g, xd, yd, fd, f2d, st in
|
||||
fresh prog, xg, yg, fg, f2g, xd, yd, fd, f2d in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -255,7 +268,7 @@ let prog_eval_t_fix_call_after_call _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_call_with_glob_usage _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, fg, xd, yd, fd, st in
|
||||
fresh prog, xg, yg, fg, xd, yd, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
fg == Nat.s yg &
|
||||
|
|
@ -272,7 +285,7 @@ let prog_eval_t_call_with_glob_usage _ = show(answer) (Stream.take (run q
|
|||
|
||||
let prog_eval_t_call_with_rd_wr_2_args _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg, x2g, y2g, fg, xd, yd, x2d, y2d, fd, st in
|
||||
fresh prog, xg, yg, x2g, y2g, fg, xd, yd, x2d, y2d, fd in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
x2g == Nat.s yg &
|
||||
|
|
@ -281,7 +294,7 @@ let prog_eval_t_call_with_rd_wr_2_args _ = show(answer) (Stream.take (run q
|
|||
xd == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
yd == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE xg) &
|
||||
x2d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y2d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE xg) &
|
||||
y2d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x2g) &
|
||||
fd == FunD ([(Mode (In, NOut), RefT (Rf, UnitT (Rd, NeverWr)));
|
||||
(Mode (In, NOut), RefT (Rf, UnitT (NRd, AlwaysWr)))],
|
||||
SeqS (ReadS (DerefP (VarP 0)),
|
||||
|
|
@ -293,7 +306,122 @@ let prog_eval_t_call_with_rd_wr_2_args _ = show(answer) (Stream.take (run q
|
|||
})
|
||||
(fun q -> q#reify (StEnv.prj_exn))))
|
||||
|
||||
(* TODO: add tests to test file *)
|
||||
let prog_eval_t_call_with_dif_mods_cp _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg,
|
||||
x2g, y2g,
|
||||
x3g, y3g,
|
||||
x4g, y4g,
|
||||
fg,
|
||||
xd, yd,
|
||||
x2d, y2d,
|
||||
x3d, y3d,
|
||||
x4d, y4d,
|
||||
fd,
|
||||
fstmts,
|
||||
stmts in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
x2g == Nat.s yg &
|
||||
y2g == Nat.s x2g &
|
||||
x3g == Nat.s y2g &
|
||||
y3g == Nat.s x3g &
|
||||
x4g == Nat.s y3g &
|
||||
y4g == Nat.s x4g &
|
||||
fg == Nat.s y4g &
|
||||
xd == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
yd == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE xg) &
|
||||
x2d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y2d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x2g) &
|
||||
x3d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y3d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x3g) &
|
||||
x4d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y4d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x4g) &
|
||||
seqo [ReadS (DerefP (VarP 1));
|
||||
ReadS (DerefP (VarP 3));
|
||||
WriteS (DerefP (VarP 1));
|
||||
WriteS (DerefP (VarP 2));
|
||||
WriteS (DerefP (VarP 3))] fstmts &
|
||||
fd == FunD ([(Mode (NIn, NOut), RefT (Cp, UnitT (NRd, AlwaysWr)));
|
||||
(Mode (In, NOut), RefT (Cp, UnitT (Rd, AlwaysWr)));
|
||||
(Mode (NIn, Out), RefT (Cp, UnitT (NRd, AlwaysWr)));
|
||||
(Mode (In, Out), RefT (Cp, UnitT (Rd, AlwaysWr)))],
|
||||
fstmts) &
|
||||
seqo [CallS (VarP fg, [PathE (VarP yg);
|
||||
PathE (VarP y2g);
|
||||
PathE (VarP y3g);
|
||||
PathE (VarP y4g)]);
|
||||
ReadS (DerefP (VarP yg));
|
||||
ReadS (DerefP (VarP y2g));
|
||||
ReadS (DerefP (VarP y3g));
|
||||
ReadS (DerefP (VarP y4g))] stmts &
|
||||
prog == Prg ([xd; yd;
|
||||
x2d; y2d;
|
||||
x3d; y3d;
|
||||
x4d; y4d;
|
||||
fd],
|
||||
stmts) &
|
||||
prog_evalo prog q
|
||||
})
|
||||
(fun q -> q#reify (StEnv.prj_exn))))
|
||||
|
||||
let prog_eval_t_call_with_dif_mods_rf _ = show(answer) (Stream.take (run q
|
||||
(fun q -> ocanren {
|
||||
fresh prog, xg, yg,
|
||||
x2g, y2g,
|
||||
x3g, y3g,
|
||||
x4g, y4g,
|
||||
fg,
|
||||
xd, yd,
|
||||
x2d, y2d,
|
||||
x3d, y3d,
|
||||
x4d, y4d,
|
||||
fd,
|
||||
fstmts,
|
||||
stmts in
|
||||
globals_min_ido xg &
|
||||
yg == Nat.s xg &
|
||||
x2g == Nat.s yg &
|
||||
y2g == Nat.s x2g &
|
||||
x3g == Nat.s y2g &
|
||||
y3g == Nat.s x3g &
|
||||
x4g == Nat.s y3g &
|
||||
y4g == Nat.s x4g &
|
||||
fg == Nat.s y4g &
|
||||
xd == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
yd == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE xg) &
|
||||
x2d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y2d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x2g) &
|
||||
x3d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y3d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x3g) &
|
||||
x4d == VarD (UnitT (Rd, AlwaysWr), UnitE) &
|
||||
y4d == VarD (RefT (Rf, UnitT (Rd, AlwaysWr)), RefE x4g) &
|
||||
seqo [ReadS (DerefP (VarP 1));
|
||||
ReadS (DerefP (VarP 3));
|
||||
WriteS (DerefP (VarP 2));
|
||||
WriteS (DerefP (VarP 3))] fstmts &
|
||||
fd == FunD ([(Mode (NIn, NOut), RefT (Rf, UnitT (NRd, NeverWr)));
|
||||
(Mode (In, NOut), RefT (Rf, UnitT (Rd, NeverWr)));
|
||||
(Mode (NIn, Out), RefT (Rf, UnitT (NRd, AlwaysWr)));
|
||||
(Mode (In, Out), RefT (Rf, UnitT (Rd, AlwaysWr)))],
|
||||
fstmts) &
|
||||
seqo [CallS (VarP fg, [PathE (VarP yg);
|
||||
PathE (VarP y2g);
|
||||
PathE (VarP y3g);
|
||||
PathE (VarP y4g)]);
|
||||
ReadS (DerefP (VarP yg));
|
||||
ReadS (DerefP (VarP y2g));
|
||||
ReadS (DerefP (VarP y3g));
|
||||
ReadS (DerefP (VarP y4g))] stmts &
|
||||
prog == Prg ([xd; yd;
|
||||
x2d; y2d;
|
||||
x3d; y3d;
|
||||
x4d; y4d;
|
||||
fd],
|
||||
stmts) &
|
||||
prog_evalo prog q
|
||||
})
|
||||
(fun q -> q#reify (StEnv.prj_exn))))
|
||||
|
||||
(* @type answerArgs = (Arg.ground List.ground) GT.list with show *)
|
||||
(* @type answerValue = Value.ground GT.list with show *)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue