summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/optionals.nim89
1 files changed, 42 insertions, 47 deletions
diff --git a/lib/pure/optionals.nim b/lib/pure/optionals.nim
index fb76c9037..30b2505ad 100644
--- a/lib/pure/optionals.nim
+++ b/lib/pure/optionals.nim
@@ -117,50 +117,45 @@ proc `==`*(a, b: Option): bool =
 
 
 when isMainModule:
-  template expect(E: expr, body: stmt) =
-    try:
-      body
-      assert false, E.type.name & " not raised"
-    except E:
-      discard
-
-
-  block: # example
-    proc find(haystack: string, needle: char): Option[int] =
-      for i, c in haystack:
-        if c == needle:
-          return some i
-
-    assert("abc".find('c').get() == 2)
-
-    let result = "team".find('i')
-
-    assert result == none(int)
-    assert result.has == false
-
-  block: # some
-    assert some(6).get() == 6
-    assert some("a").unsafeGet() == "a"
-    assert some(6).isSome
-    assert some("a").isSome
-
-  block: # none
-    expect FieldError:
-      discard none(int).get()
-    assert(none(int).isNone)
-    assert(not none(string).isSome)
-
-  block: # equality
-    assert some("a") == some("a")
-    assert some(7) != some(6)
-    assert some("a") != none(string)
-    assert none(int) == none(int)
-
-    when compiles(some("a") == some(5)):
-      assert false
-    when compiles(none(string) == none(int)):
-      assert false
-
-  block: # stringification
-    assert "some(7)" == $some(7)
-    assert "none(int)" == $none(int)
+  import unittest
+
+  suite "optionals":
+    # work around a bug in unittest
+    let intNone = none(int)
+    let stringNone = none(string)
+
+    test "example":
+      proc find(haystack: string, needle: char): Option[int] =
+        for i, c in haystack:
+          if c == needle:
+            return some i
+
+      check("abc".find('c').get() == 2)
+
+      let result = "team".find('i')
+
+      check result == intNone
+      check result.isNone
+
+    test "some":
+      check some(6).get() == 6
+      check some("a").unsafeGet() == "a"
+      check some(6).isSome
+      check some("a").isSome
+
+    test "none":
+      expect FieldError:
+        discard none(int).get()
+      check(none(int).isNone)
+      check(not none(string).isSome)
+
+    test "equality":
+      check some("a") == some("a")
+      check some(7) != some(6)
+      check some("a") != stringNone
+      check intNone == intNone
+
+      when compiles(some("a") == some(5)):
+        check false
+      when compiles(none(string) == none(int)):
+        check false