@@ -37,6 +37,12 @@ func TestCall(t *testing.T) {
37
37
vm .Register0 (NewAtom ("do_not_call_wrapped" ), func (* VM , Cont , * Env ) * Promise {
38
38
panic (errors .New ("told you" ))
39
39
})
40
+ vm .Register0 (NewAtom ("do_not_call_exception" ), func (* VM , Cont , * Env ) * Promise {
41
+ panic (Exception {NewAtom ("error" ).Apply (NewAtom ("panic_error" ).Apply (NewAtom ("told you" )))})
42
+ })
43
+ vm .Register0 (NewAtom ("do_not_call_misc_error" ), func (* VM , Cont , * Env ) * Promise {
44
+ panic (42 )
45
+ })
40
46
assert .NoError (t , vm .Compile (context .Background (), `
41
47
foo.
42
48
foo(_, _).
@@ -64,9 +70,11 @@ f(g([a, [b, c|X], Y{x:5}])).
64
70
65
71
{title : `cover all` , goal : atomComma .Apply (atomCut , NewAtom ("f" ).Apply (NewAtom ("g" ).Apply (List (NewAtom ("a" ), PartialList (NewVariable (), NewAtom ("b" ), NewAtom ("c" )), makeDict (NewAtom ("foo" ), NewAtom ("x" ), Integer (5 )))))), ok : true },
66
72
{title : `out of memory` , goal : NewAtom ("foo" ).Apply (NewVariable (), NewVariable (), NewVariable (), NewVariable (), NewVariable (), NewVariable (), NewVariable (), NewVariable (), NewVariable ()), err : resourceError (resourceMemory , nil ), mem : 1 },
67
- {title : `panic` , goal : NewAtom ("do_not_call" ), err : PanicError {errors .New ("told you" )}},
68
- {title : `panic (lazy)` , goal : NewAtom ("lazy_do_not_call" ), err : PanicError {errors .New ("told you" )}},
69
- {title : `panic (wrapped)` , goal : NewAtom ("do_not_call_wrapped" ), err : PanicError {errors .New ("told you" )}},
73
+ {title : `panic` , goal : NewAtom ("do_not_call" ), err : Exception {NewAtom ("error" ).Apply (NewAtom ("panic_error" ).Apply (NewAtom ("told you" )))}},
74
+ {title : `panic (lazy)` , goal : NewAtom ("lazy_do_not_call" ), err : Exception {NewAtom ("error" ).Apply (NewAtom ("panic_error" ).Apply (NewAtom ("told you" )))}},
75
+ {title : `panic (wrapped)` , goal : NewAtom ("do_not_call_wrapped" ), err : Exception {NewAtom ("error" ).Apply (NewAtom ("panic_error" ).Apply (NewAtom ("told you" )))}},
76
+ {title : `panic (exception)` , goal : NewAtom ("do_not_call_exception" ), err : Exception {NewAtom ("error" ).Apply (NewAtom ("panic_error" ).Apply (NewAtom ("told you" )))}},
77
+ {title : `panic (misc)` , goal : NewAtom ("do_not_call_misc_error" ), err : Exception {NewAtom ("error" ).Apply (NewAtom ("panic_error" ).Apply (NewAtom ("42" )))}},
70
78
}
71
79
72
80
for _ , tt := range tests {
@@ -5519,20 +5527,11 @@ func TestPeekChar(t *testing.T) {
5519
5527
5520
5528
func Test_Halt (t * testing.T ) {
5521
5529
t .Run ("ok" , func (t * testing.T ) {
5522
- var exitCalled bool
5523
- osExit = func (code int ) {
5524
- assert .Equal (t , 2 , code )
5525
- exitCalled = true
5526
- }
5527
- defer func () {
5528
- osExit = os .Exit
5529
- }()
5530
-
5531
- ok , err := Halt (nil , Integer (2 ), Success , nil ).Force (context .Background ())
5532
- assert .NoError (t , err )
5533
- assert .True (t , ok )
5534
-
5535
- assert .True (t , exitCalled )
5530
+ ok , err := Delay (func (ctx context.Context ) * Promise {
5531
+ return Halt (nil , Integer (2 ), Success , nil )
5532
+ }).Force (context .Background ())
5533
+ assert .EqualError (t , err , "error(panic_error(halt/1 is not allowed))" )
5534
+ assert .False (t , ok )
5536
5535
})
5537
5536
5538
5537
t .Run ("n is a variable" , func (t * testing.T ) {
0 commit comments