File: test_float_impl.py

package info (click to toggle)
riscemu 2.2.7-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,036 kB
  • sloc: python: 5,669; asm: 780; sh: 28; makefile: 26
file content (46 lines) | stat: -rw-r--r-- 1,142 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import math

from riscemu.core import Float32, Float64

# pi encoded as a 32bit little endian float
PI_BYTES_LE = b"\xdb\x0fI@"


def test_float_serialization():
    assert Float32(PI_BYTES_LE) == Float32(math.pi)
    assert Float32(math.pi).bytes == PI_BYTES_LE


def test_float_bitcast():
    f32_pi = Float32(math.pi)
    f64_pi32 = Float64.bitcast(f32_pi)
    assert f32_pi.bytes == Float32.bitcast(f64_pi32).bytes

    f64_pi = Float64(math.pi)
    f32_pi64 = Float32.bitcast(f64_pi)
    assert f64_pi.bytes[-4:] == f32_pi64.bytes
    assert Float64.bitcast(f32_pi64).bytes[:4] == b"\x00\x00\x00\x00"


def test_random_float_ops32():
    val = Float32(5)
    assert val**2 == 25
    assert val // 2 == 2
    assert val * 3 == 15
    assert val - 2 == 3
    assert val * val == 25
    assert Float32(9) ** 0.5 == 3


def test_random_float_ops64():
    val = Float64(5)
    assert val**2 == 25
    assert val // 2 == 2
    assert val * 3 == 15
    assert val - 2 == 3
    assert val * val == 25
    assert Float64(9) ** 0.5 == 3


def test_float_from_raw_bytes_conversion():
    assert Float32.from_bytes(b"\x00\x00\xa0@") == Float32(5.0)