mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-07 20:34:21 +00:00
fix VM uint conversion size bug, stricter int gen on JS (#22150)
* fix VM uint conversion bug, stricter int gen on JS fixes #19929 * fix float -> uint64 conversion too * no need to mask to source type * simpler diff with explanation, add test for described issue
This commit is contained in:
21
tests/js/tneginthash.nim
Normal file
21
tests/js/tneginthash.nim
Normal file
@@ -0,0 +1,21 @@
|
||||
# issue #19929
|
||||
|
||||
import std/[tables, hashes]
|
||||
|
||||
type Foo = object
|
||||
a: int
|
||||
|
||||
proc hash(f: Foo): Hash =
|
||||
var h: Hash = 0
|
||||
h = h !& hash(f.a)
|
||||
result = !$h
|
||||
|
||||
proc transpose[T, S](data: array[T, S]): Table[S, T] =
|
||||
for i, x in data:
|
||||
result[x] = i
|
||||
|
||||
const xs = [Foo(a: 5), Foo(a: -5)]
|
||||
const x = transpose(xs)
|
||||
|
||||
doAssert x[Foo(a: -5)] == 1
|
||||
doAssert x[Foo(a: 5)] == 0
|
||||
@@ -29,6 +29,9 @@ block hashes:
|
||||
const wy123 = hashWangYi1(123)
|
||||
doAssert wy123 != 0
|
||||
doAssert hashWangYi1(123) == wy123
|
||||
const wyNeg123 = hashWangYi1(-123)
|
||||
doAssert wyNeg123 != 0
|
||||
doAssert hashWangYi1(-123) == wyNeg123
|
||||
|
||||
|
||||
# "hashIdentity value incorrect at 456"
|
||||
|
||||
@@ -75,3 +75,10 @@ macro foo2() =
|
||||
|
||||
foo()
|
||||
foo2()
|
||||
|
||||
block:
|
||||
const neg5VM = block:
|
||||
let x = -5'i8
|
||||
uint64(x)
|
||||
let y = -5'i8
|
||||
doAssert uint64(y) == neg5VM
|
||||
|
||||
Reference in New Issue
Block a user