mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
committed by
Andreas Rumpf
parent
ca9f3b47d4
commit
6bd3a2826f
@@ -2916,7 +2916,10 @@ when not defined(JS): #and not defined(nimscript):
|
||||
elif x > y: result = 1
|
||||
else: result = 0
|
||||
else:
|
||||
result = int(c_strcmp(x, y))
|
||||
let minlen = min(x.len, y.len)
|
||||
result = int(c_memcmp(x.cstring, y.cstring, minlen.csize))
|
||||
if result == 0:
|
||||
result = x.len - y.len
|
||||
|
||||
when defined(nimscript):
|
||||
proc readFile*(filename: string): string {.tags: [ReadIOEffect], benign.}
|
||||
|
||||
@@ -24,10 +24,10 @@ proc cmpStrings(a, b: NimString): int {.inline, compilerProc.} =
|
||||
if a == b: return 0
|
||||
if a == nil: return -1
|
||||
if b == nil: return 1
|
||||
when defined(nimNoArrayToCstringConversion):
|
||||
return c_strcmp(addr a.data, addr b.data)
|
||||
else:
|
||||
return c_strcmp(a.data, b.data)
|
||||
let minlen = min(a.len, b.len)
|
||||
result = c_memcmp(addr a.data, addr b.data, minlen.csize)
|
||||
if result == 0:
|
||||
result = a.len - b.len
|
||||
|
||||
proc eqStrings(a, b: NimString): bool {.inline, compilerProc.} =
|
||||
if a == b: return true
|
||||
|
||||
@@ -56,4 +56,24 @@ proc test_string_slice() =
|
||||
|
||||
echo("OK")
|
||||
|
||||
proc test_string_cmp() =
|
||||
let world = "hello\0world"
|
||||
let earth = "hello\0earth"
|
||||
let short = "hello\0"
|
||||
let hello = "hello"
|
||||
let goodbye = "goodbye"
|
||||
|
||||
doAssert world == world
|
||||
doAssert world != earth
|
||||
doAssert world != short
|
||||
doAssert world != hello
|
||||
doAssert world != goodbye
|
||||
|
||||
doAssert cmp(world, world) == 0
|
||||
doAssert cmp(world, earth) > 0
|
||||
doAssert cmp(world, short) > 0
|
||||
doAssert cmp(world, hello) > 0
|
||||
doAssert cmp(world, goodbye) > 0
|
||||
|
||||
test_string_slice()
|
||||
test_string_cmp()
|
||||
|
||||
Reference in New Issue
Block a user