diff options
author | Araq <rumpf_a@web.de> | 2015-03-09 15:02:28 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-03-10 12:32:46 +0100 |
commit | 1efb5174f26caeebafe1b5ea9487690c5ffe1adb (patch) | |
tree | 90b292c6f6b2c45b24b26b9202fc9e13d0035298 /tests/overload | |
parent | 3ea3aa633d92e9a9c3f4668727c194cfae3ce7c4 (diff) | |
download | Nim-1efb5174f26caeebafe1b5ea9487690c5ffe1adb.tar.gz |
fixes #2220; #2219; breaks #2022; for #2022 callsite needs to be used
Diffstat (limited to 'tests/overload')
-rw-r--r-- | tests/overload/toverprc.nim | 30 | ||||
-rw-r--r-- | tests/overload/tprefer_specialized_generic.nim | 22 | ||||
-rw-r--r-- | tests/overload/tprefer_tygenericinst.nim | 43 | ||||
-rw-r--r-- | tests/overload/tsystemcmp.nim | 9 |
4 files changed, 83 insertions, 21 deletions
diff --git a/tests/overload/toverprc.nim b/tests/overload/toverprc.nim index 22b64ed48..78831f744 100644 --- a/tests/overload/toverprc.nim +++ b/tests/overload/toverprc.nim @@ -1,14 +1,19 @@ +discard """ + output: '''another number: 123 +yay''' +""" + # Test overloading of procs when used as function pointers import strutils -proc parseInt(x: float): int {.noSideEffect.} = nil -proc parseInt(x: bool): int {.noSideEffect.} = nil -proc parseInt(x: float32): int {.noSideEffect.} = nil -proc parseInt(x: int8): int {.noSideEffect.} = nil -proc parseInt(x: TFile): int {.noSideEffect.} = nil -proc parseInt(x: char): int {.noSideEffect.} = nil -proc parseInt(x: int16): int {.noSideEffect.} = nil +proc parseInt(x: float): int {.noSideEffect.} = discard +proc parseInt(x: bool): int {.noSideEffect.} = discard +proc parseInt(x: float32): int {.noSideEffect.} = discard +proc parseInt(x: int8): int {.noSideEffect.} = discard +proc parseInt(x: TFile): int {.noSideEffect.} = discard +proc parseInt(x: char): int {.noSideEffect.} = discard +proc parseInt(x: int16): int {.noSideEffect.} = discard proc parseInt[T](x: T): int = echo x; 34 @@ -19,12 +24,13 @@ var q = TParseInt(parseInt) p: TParseInt = parseInt -proc takeParseInt(x: proc (y: string): int {.noSideEffect.}): int = +proc takeParseInt(x: proc (y: string): int {.noSideEffect.}): int = result = x("123") - -echo "Give a list of numbers (separated by spaces): " -var x = stdin.readline.split.map(parseInt).max -echo x, " is the maximum!" + +if false: + echo "Give a list of numbers (separated by spaces): " + var x = stdin.readline.split.map(parseInt).max + echo x, " is the maximum!" echo "another number: ", takeParseInt(parseInt) diff --git a/tests/overload/tprefer_specialized_generic.nim b/tests/overload/tprefer_specialized_generic.nim new file mode 100644 index 000000000..2b41502d1 --- /dev/null +++ b/tests/overload/tprefer_specialized_generic.nim @@ -0,0 +1,22 @@ +discard """ + output: '''ref ref T ptr S''' +""" + +proc foo[T](x: T) = + echo "only T" + +proc foo[T](x: ref T) = + echo "ref T" + +proc foo[T, S](x: ref ref T; y: ptr S) = + echo "ref ref T ptr S" + +proc foo[T, S](x: ref T; y: ptr S) = + echo "ref T ptr S" + +proc foo[T](x: ref T; default = 0) = + echo "ref T; default" + +var x: ref ref int +var y: ptr ptr int +foo(x, y) diff --git a/tests/overload/tprefer_tygenericinst.nim b/tests/overload/tprefer_tygenericinst.nim index 2700bed5e..9787af06b 100644 --- a/tests/overload/tprefer_tygenericinst.nim +++ b/tests/overload/tprefer_tygenericinst.nim @@ -1,17 +1,42 @@ discard """ - output: "Version 2 was called." - disabled: true + output: '''Version 2 was called. +This has the highest precedence. +This has the second-highest precedence. +This has the lowest precedence.''' """ # bug #2220 +when true: + type A[T] = object + type B = A[int] -type A[T] = object -type B = A[int] + proc q[X](x: X) = + echo "Version 1 was called." -proc p[X](x: X) = - echo "Version 1 was called." + proc q(x: B) = + echo "Version 2 was called." -proc p(x: B) = - echo "Version 2 was called." + q(B()) # This call reported as ambiguous. -p(B()) # This call reported as ambiguous. +# bug #2219 +template testPred(a: expr) = + block: + type A = object of RootObj + type B = object of A + type SomeA = A|A # A hack to make "A" a typeclass. + + when a >= 3: + proc p[X](x: X) = + echo "This has the highest precedence." + when a >= 2: + proc p[X: A](x: X) = + echo "This has the second-highest precedence." + when a >= 1: + proc p[X: SomeA](x: X) = + echo "This has the lowest precedence." + + p(B()) + +testPred(3) +testPred(2) +testPred(1) diff --git a/tests/overload/tsystemcmp.nim b/tests/overload/tsystemcmp.nim index 54dff0c46..9bfca35d7 100644 --- a/tests/overload/tsystemcmp.nim +++ b/tests/overload/tsystemcmp.nim @@ -7,3 +7,12 @@ import algorithm # bug #1657 var modules = @["hi", "ho", "ha", "huu"] sort(modules, system.cmp) + +type + MyType = object + x: string + +proc cmp(a, b: MyType): int = cmp(a.x, b.x) + +var modulesB = @[MyType(x: "ho"), MyType(x: "ha")] +sort(modulesB, cmp) |