summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorJason Beetham <beefers331@gmail.com>2021-09-30 08:55:43 -0600
committerGitHub <noreply@github.com>2021-09-30 16:55:43 +0200
commitf915b3aa86929d87e162b6ddd7589e6337a30397 (patch)
tree145681372e5c59cf5ffd468507b96bee76d85a5b /tests
parentc38ab3e257fbb08622f9ec6f0068a0fd3a5d82d7 (diff)
downloadNim-f915b3aa86929d87e162b6ddd7589e6337a30397.tar.gz
Alternative to #18928 (#18931)
* fixed #18841

* Added test
Diffstat (limited to 'tests')
-rw-r--r--tests/generics/trecursivegenerics.nim52
1 files changed, 51 insertions, 1 deletions
diff --git a/tests/generics/trecursivegenerics.nim b/tests/generics/trecursivegenerics.nim
index e4c0e720f..1b152b063 100644
--- a/tests/generics/trecursivegenerics.nim
+++ b/tests/generics/trecursivegenerics.nim
@@ -43,4 +43,54 @@ block:
     ItemSimple = ref object
       link:DoublyLinkedNode[ ItemSimple ]
 
-  let link = newDoublyLinkedNode( Item[Box]() )
\ No newline at end of file
+  let link = newDoublyLinkedNode( Item[Box]() )
+
+block: #18897
+  type
+    SkipListObj[T] = object
+      over: SkipList[T]
+      down: SkipList[T]
+      value: T
+
+    SkipList[T] = ref SkipListObj[T]
+
+    GraphObj[N, E; F: static[int]] = object
+      nodes: SkipList[Node[N, E]]
+
+    Graph[N, E; F: static[int]] = ref GraphObj[N, E, F]
+
+    Node[N, E] = ref NodeObj[N, E]
+
+    NodeObj[N, E] = object
+      value: N
+      incoming: SkipList[Edge[N, E]]
+      outgoing: SkipList[Edge[N, E]]
+
+    Edge[N, E] = ref EdgeObj[N, E]
+
+    EdgeObj[N, E] = object
+      value: E
+      id: int
+      source: Node[N, E]
+      target: Node[N, E]
+
+    EdgeResult[N, E] = tuple
+      source: Node[N, E]
+      edge: Edge[N, E]
+      target: Node[N, E]
+
+  proc newSkipList[T](value: T): SkipList[T] =
+    static: echo T, " ", typeof(result.value)
+    result = SkipList[T](value: value)
+
+  proc toSkipList[T](values: openArray[T] = @[]): SkipList[T] =
+    for item in items(values):
+      if result.isNil:
+        result = newSkipList(item)
+
+  proc newContainer[N, E, F](graph: Graph[N, E, F]; form: typedesc): auto =
+    result = toSkipList[form]([])
+
+  var
+    result = Graph[int, string, 0]()
+  result.nodes = result.newContainer(Node[int, string])
\ No newline at end of file