summary refs log tree commit diff stats
path: root/tests/concepts/t976.nim
diff options
context:
space:
mode:
authorRyan McConnell <rammcconnell@gmail.com>2024-01-05 08:42:21 +0000
committerGitHub <noreply@github.com>2024-01-05 09:42:21 +0100
commit74fa8ed59a15caa2ee91f9e559b37728618c3865 (patch)
tree5c8cc5b69b190f8275adce0a334cbbe5ea9012c0 /tests/concepts/t976.nim
parent4eaa3b028cd8963799a637c8a4f7f553386fe395 (diff)
downloadNim-74fa8ed59a15caa2ee91f9e559b37728618c3865.tar.gz
Changing generic weight of `tyGenericParam` (#22143)
This is in reference to a [feature
request](https://github.com/nim-lang/Nim/issues/22142) that I posted.

I'm making this PR to demonstrate the suggested change and expect that
this should be scrutinized

---------

Co-authored-by: Bung <crc32@qq.com>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Diffstat (limited to 'tests/concepts/t976.nim')
-rw-r--r--tests/concepts/t976.nim57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/concepts/t976.nim b/tests/concepts/t976.nim
new file mode 100644
index 000000000..776d53827
--- /dev/null
+++ b/tests/concepts/t976.nim
@@ -0,0 +1,57 @@
+discard """
+  output: '''
+Printable
+'''
+joinable: false
+"""
+
+#[
+  The converter is a proper example of a confounding variable
+  Moved to an isolated file
+]#
+
+type
+  Obj1[T] = object
+      v: T
+converter toObj1[T](t: T): Obj1[T] =
+  return Obj1[T](v: t)
+block t976:
+  type
+    int1 = distinct int
+    int2 = distinct int
+    int1g = concept x
+      x is int1
+    int2g = concept x
+      x is int2
+
+  proc take[T: int1g](value: int1) =
+    when T is int2:
+      static: error("killed in take(int1)")
+
+  proc take[T: int2g](vale: int2) =
+    when T is int1:
+      static: error("killed in take(int2)")
+
+  var i1: int1 = 1.int1
+  var i2: int2 = 2.int2
+
+  take[int1](i1)
+  take[int2](i2)
+
+  template reject(e) =
+    static: assert(not compiles(e))
+
+  reject take[string](i2)
+  reject take[int1](i2)
+
+  # bug #6249
+  type
+      Obj2 = ref object
+      PrintAble = concept x
+          $x is string
+
+  proc `$`[T](nt: Obj1[T]): string =
+      when T is PrintAble: result = "Printable"
+      else: result = "Non Printable"
+
+  echo Obj2()
\ No newline at end of file