summary refs log tree commit diff stats
path: root/tests/generics/tgenericvariant.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/generics/tgenericvariant.nim')
-rw-r--r--tests/generics/tgenericvariant.nim36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/generics/tgenericvariant.nim b/tests/generics/tgenericvariant.nim
new file mode 100644
index 000000000..5ba3a2e7c
--- /dev/null
+++ b/tests/generics/tgenericvariant.nim
@@ -0,0 +1,36 @@
+discard """
+output: '''
+Test
+abcxyz123
+'''
+"""
+
+proc fakeReadLine(): string =
+  "abcxyz123"
+
+type
+  TMaybe[T] = object
+    case empty: bool
+    of false: value: T
+    else: nil
+
+proc Just*[T](val: T): TMaybe[T] =
+  result.empty = false
+  result.value = val
+
+proc Nothing[T](): TMaybe[T] =
+  result.empty = true
+
+proc safeReadLine(): TMaybe[string] =
+  var r = fakeReadLine()
+  if r == "": return Nothing[string]()
+  else: return Just(r)
+
+proc main() =
+  var Test = Just("Test")
+  echo(Test.value)
+  var mSomething = safeReadLine()
+  echo(mSomething.value)
+  mSomething = safeReadLine()
+
+main()