summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xlib/system.nim2
-rw-r--r--tests/run/tobject.nim20
2 files changed, 14 insertions, 8 deletions
diff --git a/lib/system.nim b/lib/system.nim
index db78d2740..3f15dbeaf 100755
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -1557,6 +1557,8 @@ proc `<`*[T: tuple](x, y: T): bool =
     if c > 0: return false
   return false
 
+proc `$`*[T: ref](x: T): string = $x[]
+
 proc `$`*[T: tuple|object](x: T): string = 
   ## generic ``$`` operator for tuples that is lifted from the components
   ## of `x`. Example:
diff --git a/tests/run/tobject.nim b/tests/run/tobject.nim
index 246f2862b..b2fd21236 100644
--- a/tests/run/tobject.nim
+++ b/tests/run/tobject.nim
@@ -7,15 +7,19 @@ proc makeObj(x: int): ref Obj =
   new(result)
   result.foo = x
 
-proc initObject(x: int): Obj = 
+proc initObj(x: int): Obj = 
   result.foo = x
 
-suite "object basic methods":
-  test "it should convert an objcet to a string":
-    var obj = makeObj(1)
+template stringTest(init: expr) =
+  test "it should convert an object to a string":
+    var obj = `init`(1)
     # Should be "obj: (foo: 1)" or similar.
     check($obj == "(foo: 1)")
-  test "it should test equality based on fields":
-    check(initObj(1) == initObj(1))
-  test "it should test equality based on fields for refs too":
-    check(makeObj(1) == makeObj(1))
+
+suite "object basic methods":
+  suite "ref":
+    stringTest(makeObj)
+  suite "value":
+    stringTest(initObj)
+    test "it should test equality based on fields":
+      check(initObj(1) == initObj(1))