diff options
-rw-r--r-- | lib/system.nim | 2 | ||||
-rw-r--r-- | tests/array/tarraylen.nim | 18 |
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/system.nim b/lib/system.nim index a4460570a..efffeaeca 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -718,7 +718,7 @@ proc len*[TOpenArray: openArray|varargs](x: TOpenArray): int {. magic: "LengthOpenArray", noSideEffect.} proc len*(x: string): int {.magic: "LengthStr", noSideEffect.} proc len*(x: cstring): int {.magic: "LengthStr", noSideEffect.} -proc len*[I, T](x: array[I, T]): int {.magic: "LengthArray", noSideEffect.} +proc len*(x: (type array)|array): int {.magic: "LengthArray", noSideEffect.} proc len*[T](x: seq[T]): int {.magic: "LengthSeq", noSideEffect.} ## returns the length of an array, an openarray, a sequence or a string. ## This is roughly the same as ``high(T)-low(T)+1``, but its resulting type is diff --git a/tests/array/tarraylen.nim b/tests/array/tarraylen.nim new file mode 100644 index 000000000..e9612de58 --- /dev/null +++ b/tests/array/tarraylen.nim @@ -0,0 +1,18 @@ +discard """ + output: "" +""" +var a: array[0, int] +doAssert a.len == 0 +doAssert array[0..0, int].len == 1 +doAssert array[0..0, int]([1]).len == 1 +doAssert array[1..1, int].len == 1 +doAssert array[1..1, int]([1]).len == 1 +doAssert array[2, int].len == 2 +doAssert array[2, int]([1, 2]).len == 2 +doAssert array[1..3, int].len == 3 +doAssert array[1..3, int]([1, 2, 3]).len == 3 +doAssert array[0..2, int].len == 3 +doAssert array[0..2, int]([1, 2, 3]).len == 3 +doAssert array[-2 .. -2, int].len == 1 +doAssert([1, 2, 3].len == 3) +doAssert([42].len == 1) \ No newline at end of file |