summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/typerel/t4799.nim82
-rw-r--r--tests/typerel/t4799_2.nim12
-rw-r--r--tests/typerel/t4799_3.nim12
-rw-r--r--tests/typerel/t4799_4.nim23
-rw-r--r--tests/typerel/t4799_5.nim23
-rw-r--r--tests/typerel/t4799_6.nim20
-rw-r--r--tests/typerel/t4799_7.nim20
7 files changed, 87 insertions, 105 deletions
diff --git a/tests/typerel/t4799.nim b/tests/typerel/t4799.nim
index f1c283165..89312950f 100644
--- a/tests/typerel/t4799.nim
+++ b/tests/typerel/t4799.nim
@@ -142,7 +142,7 @@ block test_t4799_6:
   #doAssert(testS([b, c, a]) == "rc2rd3base1")
   #doAssert(testS([c, b, a]) == "rd3rc2base1")
 
-proc test_inproc() =  
+proc test_inproc() =
   block test_inproc_1:
     var rgv = GRBase[int](val: 3)
     var rgc = GRC[int](val: 4)
@@ -153,7 +153,7 @@ proc test_inproc() =
     doAssert(testGR([rgb, rgc, rgv]) == "243")
     doAssert(testGR([rgc, rgv, rgb]) == "432")
     doAssert(testGR([rgv, rgb, rgc]) == "324")
-  
+
   block test_inproc_2:
     var pgv = PRBase[int](val: 3)
     var pgc = PRC[int](val: 4)
@@ -164,6 +164,82 @@ proc test_inproc() =
     doAssert(testPR([pgb.addr, pgc.addr, pgv.addr]) == "243")
     doAssert(testPR([pgc.addr, pgv.addr, pgb.addr]) == "432")
     doAssert(testPR([pgv.addr, pgb.addr, pgc.addr]) == "324")
-  
+
 test_inproc()
+
+template reject(x) =
+  static: assert(not compiles(x))
+
+block test_t4799_7:
+  type
+    Vehicle[T] = ref object of RootObj
+      tire: T
+    Car[T] = object of Vehicle[T]
+    Bike[T] = object of Vehicle[T]
+
+  proc testVehicle[T](x: varargs[Vehicle[T]]): string {.used.} =
+    result = ""
+    for c in x:
+      result.add $c.tire
+
+  var v = Vehicle[int](tire: 3)
+  var c = Car[int](tire: 4)
+  var b = Bike[int](tire: 2)
+
+  reject:
+    echo testVehicle b, c, v
+
+block test_t4799_8:
+  type
+    Vehicle = ref object of RootObj
+      tire: int
+    Car = object of Vehicle
+    Bike = object of Vehicle
+
+  proc testVehicle(x: varargs[Vehicle]): string {.used.} =
+    result = ""
+    for c in x:
+      result.add $c.tire
+
+  var v = Vehicle(tire: 3)
+  var c = Car(tire: 4)
+  var b = Bike(tire: 2)
+
+  reject:
+    echo testVehicle b, c, v
+
+type
+  PGVehicle[T] = ptr object of RootObj
+    tire: T
+  PGCar[T] = object of PGVehicle[T]
+  PGBike[T] = object of PGVehicle[T]
+
+proc testVehicle[T](x: varargs[PGVehicle[T]]): string {.used.} =
+  result = ""
+  for c in x:
+    result.add $c.tire
+
+var pgc = PGCar[int](tire: 4)
+var pgb = PGBike[int](tire: 2)
+
+reject:
+  echo testVehicle pgb, pgc
+
+type
+  RVehicle = ptr object of RootObj
+    tire: int
+  RCar = object of RVehicle
+  RBike = object of RVehicle
+
+proc testVehicle(x: varargs[RVehicle]): string {.used.} =
+  result = ""
+  for c in x:
+    result.add $c.tire
+
+var rc = RCar(tire: 4)
+var rb = RBike(tire: 2)
+
+reject:
+  echo testVehicle rb, rc
+
 echo "OK"
diff --git a/tests/typerel/t4799_2.nim b/tests/typerel/t4799_2.nim
index 191a40469..cfd399a6e 100644
--- a/tests/typerel/t4799_2.nim
+++ b/tests/typerel/t4799_2.nim
@@ -1,14 +1,10 @@
 discard """
-errormsg: "type mismatch: got <Bike[system.int]>"
-nimout: '''t4799_2.nim(24, 18) Error: type mismatch: got <Bike[system.int]>
-but expected one of:
-proc testVehicle[T](x: varargs[Vehicle[T]]): string
-
-expression: testVehicle b'''
+  outputsub: '''ObjectAssignmentError'''
+  exitcode: "1"
 """
 
 type
-  Vehicle[T] = ref object of RootObj
+  Vehicle[T] = object of RootObj
     tire: T
   Car[T] = object of Vehicle[T]
   Bike[T] = object of Vehicle[T]
@@ -21,4 +17,4 @@ proc testVehicle[T](x: varargs[Vehicle[T]]): string =
 var v = Vehicle[int](tire: 3)
 var c = Car[int](tire: 4)
 var b = Bike[int](tire: 2)
-echo testVehicle b, c, v
+echo testVehicle([b, c, v])
\ No newline at end of file
diff --git a/tests/typerel/t4799_3.nim b/tests/typerel/t4799_3.nim
index aa2ddac56..784eee8fc 100644
--- a/tests/typerel/t4799_3.nim
+++ b/tests/typerel/t4799_3.nim
@@ -1,14 +1,10 @@
 discard """
-errormsg: "type mismatch: got <Bike>"
-nimout: '''t4799_3.nim(24, 18) Error: type mismatch: got <Bike>
-but expected one of:
-proc testVehicle(x: varargs[Vehicle]): string
-
-expression: testVehicle b'''
+  outputsub: '''ObjectAssignmentError'''
+  exitcode: "1"
 """
 
 type
-  Vehicle = ref object of RootObj
+  Vehicle = object of RootObj
     tire: int
   Car = object of Vehicle
   Bike = object of Vehicle
@@ -21,4 +17,4 @@ proc testVehicle(x: varargs[Vehicle]): string =
 var v = Vehicle(tire: 3)
 var c = Car(tire: 4)
 var b = Bike(tire: 2)
-echo testVehicle b, c, v
\ No newline at end of file
+echo testVehicle([b, c, v])
\ No newline at end of file
diff --git a/tests/typerel/t4799_4.nim b/tests/typerel/t4799_4.nim
deleted file mode 100644
index 52c45793c..000000000
--- a/tests/typerel/t4799_4.nim
+++ /dev/null
@@ -1,23 +0,0 @@
-discard """
-errormsg: "type mismatch: got <Bike[system.int]>"
-nimout: '''t4799_4.nim(23, 18) Error: type mismatch: got <Bike[system.int]>
-but expected one of:
-proc testVehicle[T](x: varargs[Vehicle[T]]): string
-
-expression: testVehicle b'''
-"""
-
-type
-  Vehicle[T] = ptr object of RootObj
-    tire: T
-  Car[T] = object of Vehicle[T]
-  Bike[T] = object of Vehicle[T]
-
-proc testVehicle[T](x: varargs[Vehicle[T]]): string =
-  result = ""
-  for c in x:
-    result.add $c.tire
-
-var c = Car[int](tire: 4)
-var b = Bike[int](tire: 2)
-echo testVehicle b, c
\ No newline at end of file
diff --git a/tests/typerel/t4799_5.nim b/tests/typerel/t4799_5.nim
deleted file mode 100644
index 8c7fdc313..000000000
--- a/tests/typerel/t4799_5.nim
+++ /dev/null
@@ -1,23 +0,0 @@
-discard """
-errormsg: "type mismatch: got <Bike>"
-nimout: '''t4799_5.nim(23, 18) Error: type mismatch: got <Bike>
-but expected one of:
-proc testVehicle(x: varargs[Vehicle]): string
-
-expression: testVehicle b'''
-"""
-
-type
-  Vehicle = ptr object of RootObj
-    tire: int
-  Car = object of Vehicle
-  Bike = object of Vehicle
-
-proc testVehicle(x: varargs[Vehicle]): string =
-  result = ""
-  for c in x:
-    result.add $c.tire
-
-var c = Car(tire: 4)
-var b = Bike(tire: 2)
-echo testVehicle b, c
\ No newline at end of file
diff --git a/tests/typerel/t4799_6.nim b/tests/typerel/t4799_6.nim
deleted file mode 100644
index cfd399a6e..000000000
--- a/tests/typerel/t4799_6.nim
+++ /dev/null
@@ -1,20 +0,0 @@
-discard """
-  outputsub: '''ObjectAssignmentError'''
-  exitcode: "1"
-"""
-
-type
-  Vehicle[T] = object of RootObj
-    tire: T
-  Car[T] = object of Vehicle[T]
-  Bike[T] = object of Vehicle[T]
-
-proc testVehicle[T](x: varargs[Vehicle[T]]): string =
-  result = ""
-  for c in x:
-    result.add $c.tire
-
-var v = Vehicle[int](tire: 3)
-var c = Car[int](tire: 4)
-var b = Bike[int](tire: 2)
-echo testVehicle([b, c, v])
\ No newline at end of file
diff --git a/tests/typerel/t4799_7.nim b/tests/typerel/t4799_7.nim
deleted file mode 100644
index 784eee8fc..000000000
--- a/tests/typerel/t4799_7.nim
+++ /dev/null
@@ -1,20 +0,0 @@
-discard """
-  outputsub: '''ObjectAssignmentError'''
-  exitcode: "1"
-"""
-
-type
-  Vehicle = object of RootObj
-    tire: int
-  Car = object of Vehicle
-  Bike = object of Vehicle
-
-proc testVehicle(x: varargs[Vehicle]): string =
-  result = ""
-  for c in x:
-    result.add $c.tire
-
-var v = Vehicle(tire: 3)
-var c = Car(tire: 4)
-var b = Bike(tire: 2)
-echo testVehicle([b, c, v])
\ No newline at end of file