summary refs log tree commit diff stats
path: root/tests/niminaction/Chapter3/various3.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/niminaction/Chapter3/various3.nim')
-rw-r--r--tests/niminaction/Chapter3/various3.nim99
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/niminaction/Chapter3/various3.nim b/tests/niminaction/Chapter3/various3.nim
new file mode 100644
index 000000000..c7cdf7db4
--- /dev/null
+++ b/tests/niminaction/Chapter3/various3.nim
@@ -0,0 +1,99 @@
+discard """
+matrix: "--mm:refc"
+output: '''
+Future is no longer empty, 42
+'''
+"""
+
+import threadpool
+proc foo: string = "Dog"
+var x: FlowVar[string] = spawn foo()
+doAssert(^x == "Dog")
+
+block:
+  type
+    Box = object
+      case empty: bool
+      of false:
+        contents: string
+      else:
+        discard
+
+  var obj = Box(empty: false, contents: "Hello")
+  doAssert obj.contents == "Hello"
+
+  var obj2 = Box(empty: true)
+  doAssertRaises(FieldDefect):
+    echo(obj2.contents)
+
+import json
+doAssert parseJson("null").kind == JNull
+doAssert parseJson("true").kind == JBool
+doAssert parseJson("42").kind == JInt
+doAssert parseJson("3.14").kind == JFloat
+doAssert parseJson("\"Hi\"").kind == JString
+doAssert parseJson("""{ "key": "value" }""").kind == JObject
+doAssert parseJson("[1, 2, 3, 4]").kind == JArray
+
+import json
+let data = """
+  {"username": "Dominik"}
+"""
+
+let obj = parseJson(data)
+doAssert obj.kind == JObject
+doAssert obj["username"].kind == JString
+doAssert obj["username"].str == "Dominik"
+
+block:
+  proc count10(): int =
+    for i in 0 ..< 10:
+      result.inc
+  doAssert count10() == 10
+
+type
+  Point = tuple[x, y: int]
+
+var point = (5, 10)
+var point2 = (x: 5, y: 10)
+
+type
+  Human = object
+    name: string
+    age: int
+
+var jeff = Human(name: "Jeff", age: 23)
+var amy = Human(name: "Amy", age: 20)
+
+import asyncdispatch
+
+var future = newFuture[int]()
+doAssert(not future.finished)
+
+future.callback =
+  proc (future: Future[int]) =
+    echo("Future is no longer empty, ", future.read)
+
+future.complete(42)
+
+import asyncdispatch, asyncfile
+
+when false:
+  var file = openAsync("")
+  let dataFut = file.readAll()
+  dataFut.callback =
+    proc (future: Future[string]) =
+      echo(future.read())
+
+  asyncdispatch.runForever()
+
+import asyncdispatch, asyncfile, os
+
+proc readFiles() {.async.} =
+  # --- Changed to getTempDir here.
+  var file = openAsync(getTempDir() / "test.txt", fmReadWrite)
+  let data = await file.readAll()
+  echo(data)
+  await file.write("Hello!\n")
+
+waitFor readFiles()