summary refs log tree commit diff stats
path: root/tests/concepts/tmodifiersinplace.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/concepts/tmodifiersinplace.nim')
-rw-r--r--tests/concepts/tmodifiersinplace.nim30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/concepts/tmodifiersinplace.nim b/tests/concepts/tmodifiersinplace.nim
new file mode 100644
index 000000000..db5583929
--- /dev/null
+++ b/tests/concepts/tmodifiersinplace.nim
@@ -0,0 +1,30 @@
+type
+  VarContainer[T] = concept c
+    put(var c, T)
+
+  AltVarContainer[T] = concept var c
+    put(c, T)
+
+  NonVarContainer[T] = concept c
+    put(c, T)
+
+  GoodContainer = object
+    x: int
+
+  BadContainer = object
+    x: int
+
+proc put(x: BadContainer, y: int) = discard
+proc put(x: var GoodContainer, y: int) = discard
+
+template ok(x) = assert(x)
+template no(x) = assert(not(x))
+
+static:
+  ok GoodContainer is VarContainer[int]
+  ok GoodContainer is AltVarContainer[int]
+  no BadContainer is VarContainer[int]
+  no BadContainer is AltVarContainer[int]
+  ok GoodContainer is NonVarContainer[int]
+  ok BadContainer is NonVarContainer[int]
+