mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
js generates spurious >>> on shr (#17767)
* js generates spurious >>> on shr * Add shr arithmetic test * fix variables from const to let during testing
This commit is contained in:
@@ -683,8 +683,7 @@ proc arith(p: PProc, n: PNode, r: var TCompRes, op: TMagic) =
|
||||
var x, y: TCompRes
|
||||
gen(p, n[1], x)
|
||||
gen(p, n[2], y)
|
||||
let trimmer = unsignedTrimmer(n[1].typ.skipTypes(abstractRange).size)
|
||||
r.res = "(($1 $2) >>> $3)" % [x.rdLoc, trimmer, y.rdLoc]
|
||||
r.res = "($1 >>> $2)" % [x.rdLoc, y.rdLoc]
|
||||
of mCharToStr, mBoolToStr, mIntToStr, mInt64ToStr, mFloatToStr,
|
||||
mCStrToStr, mStrToStr, mEnumToStr:
|
||||
arithAux(p, n, r, op)
|
||||
|
||||
49
tests/stdlib/tarithmetics.nim
Normal file
49
tests/stdlib/tarithmetics.nim
Normal file
@@ -0,0 +1,49 @@
|
||||
discard """
|
||||
targets: "c cpp js"
|
||||
"""
|
||||
|
||||
# TODO: in future work move existing arithmetic tests (tests/arithm/*) into this file
|
||||
# FYI https://github.com/nim-lang/Nim/pull/17767
|
||||
|
||||
template main =
|
||||
# put all arithmetic tests
|
||||
|
||||
block tshr:
|
||||
block: # Signed types
|
||||
let
|
||||
a1 = -3
|
||||
a2 = -2
|
||||
b1 = -4'i8
|
||||
b2 = 1'i8
|
||||
c1 = -5'i16
|
||||
c2 = 1'i16
|
||||
d1 = -7i32
|
||||
d2 = 1'i32
|
||||
e1 = -9'i64
|
||||
e2 = 1'i64
|
||||
doAssert a1 shr a2 == -1
|
||||
doAssert b1 shr b2 == -2
|
||||
doAssert c1 shr c2 == -3
|
||||
doAssert d1 shr d2 == -4
|
||||
doAssert e1 shr e2 == -5
|
||||
|
||||
block: # Unsigned types
|
||||
let
|
||||
a1 = 3'u
|
||||
a2 = 2'u
|
||||
b1 = 2'u8
|
||||
b2 = 1'u8
|
||||
c1 = 5'u16
|
||||
c2 = 1'u16
|
||||
d1 = 6'u32
|
||||
d2 = 1'u32
|
||||
e1 = 8'u64
|
||||
e2 = 1'u64
|
||||
doAssert a1 shr a2 == 0
|
||||
doAssert b1 shr b2 == 1
|
||||
doAssert c1 shr c2 == 2
|
||||
doAssert d1 shr d2 == 3
|
||||
doAssert e1 shr e2 == 4
|
||||
|
||||
static: main()
|
||||
main()
|
||||
Reference in New Issue
Block a user