1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
structure ExceptionDecl =
struct
open SMLUnit.Test SMLUnit.Assert
fun testExceptionDecl () =
let
exception Exn1
exception Exn2 of int
val _ = (raise Exn1)
handle Exn1 => ()
| _ => fail "NG"
val _ = (raise Exn2 1)
handle Exn2 1 => ()
| _ => fail "NG"
in
()
end
fun testExceptionDeclEq () =
let
exception Exn1 of int
exception Exn2 = Exn1
val _ = (raise Exn1 1)
handle Exn2 1 => ()
| _ => fail "NG"
in
()
end
structure S1 = struct
exception Exn1 of int
end
fun testExceptionDeclEqLongVID () =
let
exception Exn1 of int
exception Exn2 = S1.Exn1
val _ = (raise S1.Exn1 1)
handle Exn1 _ => fail "NG"
| Exn2 1 => ()
| _ => fail "NG"
in
()
end
fun testExceptionDeclAnd () =
let
exception Exn1
fun f1 x = (raise x)
handle Exn1 => true
| _ => false
exception Exn1
and Exn2 = Exn1
val _ = assertFalse (f1 Exn1)
val _ = assertTrue (f1 Exn2)
in
()
end
fun testExceptionDeclCaseOf () =
let
exception Exn1
exception Exn2 of int
val _ = case Exn1 of
Exn1 => ()
| _ => fail "NG"
val _ = case Exn2 1 of
Exn2 2 => fail "NG"
| Exn2 1 => ()
| _ => fail "NG"
in
()
end
val tests = TestList [
Test ("testExceptionDecl", testExceptionDecl),
Test ("testExceptionDeclEq", testExceptionDeclEq),
Test ("testExceptionDeclEqLongVID", testExceptionDeclEqLongVID),
Test ("testExceptionDeclAnd", testExceptionDeclAnd),
Test ("testExceptionDeclCaseOf", testExceptionDeclCaseOf)
]
end
|