mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
- Fixed-point formulas are implemented using IEEE-754 floating-point internally, which could give infinity or NaN values whose conversion to fixed-point integer was platform-dependent. - Formatting fixed-point $8000_0000 (INT32_MIN, -2147483648) was not putting the negative sign in front.
52 lines
1.1 KiB
NASM
52 lines
1.1 KiB
NASM
def X equ 0
|
|
|
|
MACRO test
|
|
; Test RGBASM
|
|
def v equs "X +"
|
|
static_assert \#
|
|
purge v
|
|
; Test RGBLINK
|
|
def v equs "Y +"
|
|
assert \#
|
|
purge v
|
|
ENDM
|
|
|
|
test (v 2)*(v 10)**(v 2)*(v 2) == (v 400)
|
|
test -(v 3)**(v 4) == (v -81)
|
|
test (v 1) << (v 30) == (v $4000_0000)
|
|
test (v 2)**(v 30) == (v $4000_0000)
|
|
test (v 37)/(v 2) == (v 18)
|
|
|
|
assert DIV(5.0, 2.0) == 2.5
|
|
assert DIV(-5.0, 2.0) == -2.5
|
|
assert DIV(5.0, 0.0) == $7fff_ffff ; +inf => INT32_MAX
|
|
assert DIV(-5.0, 0.0) == $8000_0000 ; -inf => INT32_MIN
|
|
assert DIV(0.0, 0.0) == $0000_0000 ; nan => 0
|
|
|
|
assert MUL(10.0, 0.5) == 5.0
|
|
assert MUL(10.0, 0.0) == 0.0
|
|
|
|
assert FMOD(5.0, 2.0) == 1.0
|
|
assert FMOD(-5.0, 2.0) == -1.0
|
|
assert FMOD(5.0, 0.0) == 0 ; nan
|
|
assert FMOD(-5.0, 0.0) == 0 ; nan
|
|
assert FMOD(0.0, 0.0) == 0 ; nan
|
|
|
|
assert POW(10.0, 2.0) == 100.0
|
|
assert POW(100.0, 0.5) == 10.0
|
|
|
|
assert LOG(100.0, 10.0) == 2.0
|
|
assert LOG(256.0, 2.0) == 8.0
|
|
|
|
assert ROUND(1.5) == 2.0
|
|
assert ROUND(-1.5) == -2.0
|
|
|
|
assert CEIL(1.5) == 2.0
|
|
assert CEIL(-1.5) == -1.0
|
|
|
|
assert FLOOR(1.5) == 1.0
|
|
assert FLOOR(-1.5) == -2.0
|
|
|
|
SECTION "Y", ROM0
|
|
Y::
|