Skip to content

Commit f24c632

Browse files
committed
Add methods to create instances from data of any floating-point types
1 parent 34156c9 commit f24c632

11 files changed

Lines changed: 1763 additions & 8 deletions

File tree

python/src/softfloatpy/_core.pyi

Lines changed: 843 additions & 1 deletion
Large diffs are not rendered by default.

python/src/softfloatpy/_core.pyx

Lines changed: 845 additions & 3 deletions
Large diffs are not rendered by default.

python/tests/softfloatpy/test_bfloat16.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ def test_bf16_to_f32() -> None:
4848
o: sf.BFloat16 = sf.BFloat16.from_float(f)
4949
assert sf.bf16_to_f32(o).to_float() == f
5050
assert sf.bf16_to_f32(o).to_bytes() == o.to_f32().to_bytes()
51+
assert sf.BFloat16.from_f32(o.to_f32()).to_bytes() == o.to_bytes()
5152

5253

5354
def test_bf16_is_signaling_nan() -> None:

python/tests/softfloatpy/test_float128.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,48 +49,61 @@ def test_f128_to_ui32() -> None:
4949
o: sf.Float128 = sf.Float128.from_float(f)
5050
assert sf.f128_to_ui32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5151
assert sf.f128_to_ui32(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui32(sf.RoundingMode.MIN).to_bytes()
52+
assert sf.Float128.from_ui32(o.to_ui32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5253

5354

5455
def test_f128_to_ui64() -> None:
5556
f: float = 12.3
5657
o: sf.Float128 = sf.Float128.from_float(f)
5758
assert sf.f128_to_ui64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5859
assert sf.f128_to_ui64(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui64(sf.RoundingMode.MIN).to_bytes()
60+
assert sf.Float128.from_ui64(o.to_ui64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5961

6062

6163
def test_f128_to_i32() -> None:
6264
f: float = -12.3
6365
o: sf.Float128 = sf.Float128.from_float(f)
6466
assert sf.f128_to_i32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
6567
assert sf.f128_to_i32(o, sf.RoundingMode.MIN).to_bytes() == o.to_i32(sf.RoundingMode.MIN).to_bytes()
68+
assert sf.Float128.from_i32(o.to_i32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
6669

6770

6871
def test_f128_to_i64() -> None:
6972
f: float = -12.3
7073
o: sf.Float128 = sf.Float128.from_float(f)
7174
assert sf.f128_to_i64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
7275
assert sf.f128_to_i64(o, sf.RoundingMode.MIN).to_bytes() == o.to_i64(sf.RoundingMode.MIN).to_bytes()
76+
assert sf.Float128.from_i64(o.to_i64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
7377

7478

7579
def test_f128_to_f16() -> None:
7680
f: float = -12.5
7781
o: sf.Float128 = sf.Float128.from_float(f)
7882
assert sf.f128_to_f16(o).to_float() == f
7983
assert sf.f128_to_f16(o).to_bytes() == o.to_f16().to_bytes()
84+
assert sf.Float128.from_f16(o.to_f16()).to_bytes() == o.to_bytes()
8085

8186

8287
def test_f128_to_f32() -> None:
8388
f: float = -12.5
8489
o: sf.Float128 = sf.Float128.from_float(f)
8590
assert sf.f128_to_f32(o).to_float() == f
8691
assert sf.f128_to_f32(o).to_bytes() == o.to_f32().to_bytes()
92+
assert sf.Float128.from_f32(o.to_f32()).to_bytes() == o.to_bytes()
8793

8894

8995
def test_f128_to_f64() -> None:
9096
f: float = -12.5
9197
o: sf.Float128 = sf.Float128.from_float(f)
9298
assert sf.f128_to_f64(o).to_float() == f
9399
assert sf.f128_to_f64(o).to_bytes() == o.to_f64().to_bytes()
100+
assert sf.Float128.from_f64(o.to_f64()).to_bytes() == o.to_bytes()
101+
102+
103+
def test_f128_to_f128() -> None:
104+
f: float = -12.5
105+
o: sf.Float128 = sf.Float128.from_float(f)
106+
assert sf.Float128.from_f128(o.to_f128()).to_bytes() == o.to_bytes()
94107

95108

96109
def test_f128_round_to_int() -> None:

python/tests/softfloatpy/test_float16.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,48 +49,61 @@ def test_f16_to_ui32() -> None:
4949
o: sf.Float16 = sf.Float16.from_float(f)
5050
assert sf.f16_to_ui32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5151
assert sf.f16_to_ui32(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui32(sf.RoundingMode.MIN).to_bytes()
52+
assert sf.Float16.from_ui32(o.to_ui32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5253

5354

5455
def test_f16_to_ui64() -> None:
5556
f: float = 12.3
5657
o: sf.Float16 = sf.Float16.from_float(f)
5758
assert sf.f16_to_ui64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5859
assert sf.f16_to_ui64(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui64(sf.RoundingMode.MIN).to_bytes()
60+
assert sf.Float16.from_ui64(o.to_ui64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5961

6062

6163
def test_f16_to_i32() -> None:
6264
f: float = -12.3
6365
o: sf.Float16 = sf.Float16.from_float(f)
6466
assert sf.f16_to_i32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
6567
assert sf.f16_to_i32(o, sf.RoundingMode.MIN).to_bytes() == o.to_i32(sf.RoundingMode.MIN).to_bytes()
68+
assert sf.Float16.from_i32(o.to_i32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
6669

6770

6871
def test_f16_to_i64() -> None:
6972
f: float = -12.3
7073
o: sf.Float16 = sf.Float16.from_float(f)
7174
assert sf.f16_to_i64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
7275
assert sf.f16_to_i64(o, sf.RoundingMode.MIN).to_bytes() == o.to_i64(sf.RoundingMode.MIN).to_bytes()
76+
assert sf.Float16.from_i64(o.to_i64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
77+
78+
79+
def test_f16_to_f16() -> None:
80+
f: float = -12.5
81+
o: sf.Float16 = sf.Float16.from_float(f)
82+
assert sf.Float16.from_f16(o.to_f16()).to_bytes() == o.to_bytes()
7383

7484

7585
def test_f16_to_f32() -> None:
7686
f: float = -12.5
7787
o: sf.Float16 = sf.Float16.from_float(f)
7888
assert sf.f16_to_f32(o).to_float() == f
7989
assert sf.f16_to_f32(o).to_bytes() == o.to_f32().to_bytes()
90+
assert sf.Float16.from_f32(o.to_f32()).to_bytes() == o.to_bytes()
8091

8192

8293
def test_f16_to_f64() -> None:
8394
f: float = -12.5
8495
o: sf.Float16 = sf.Float16.from_float(f)
8596
assert sf.f16_to_f64(o).to_float() == f
8697
assert sf.f16_to_f64(o).to_bytes() == o.to_f64().to_bytes()
98+
assert sf.Float16.from_f64(o.to_f64()).to_bytes() == o.to_bytes()
8799

88100

89101
def test_f16_to_f128() -> None:
90102
f: float = -12.5
91103
o: sf.Float16 = sf.Float16.from_float(f)
92104
assert sf.f16_to_f128(o).to_float() == f
93105
assert sf.f16_to_f128(o).to_bytes() == o.to_f128().to_bytes()
106+
assert sf.Float16.from_f128(o.to_f128()).to_bytes() == o.to_bytes()
94107

95108

96109
def test_f16_round_to_int() -> None:

python/tests/softfloatpy/test_float32.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,55 +48,70 @@ def test_f32_to_bf16() -> None:
4848
f: float = -12.5
4949
o: sf.Float32 = sf.Float32.from_float(f)
5050
assert sf.f32_to_bf16(o).to_float() == f
51+
assert sf.f32_to_bf16(o).to_bytes() == o.to_bf16().to_bytes()
52+
assert sf.Float32.from_bf16(o.to_bf16()).to_bytes() == o.to_bytes()
5153

5254

5355
def test_f32_to_ui32() -> None:
5456
f: float = 12.3
5557
o: sf.Float32 = sf.Float32.from_float(f)
5658
assert sf.f32_to_ui32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5759
assert sf.f32_to_ui32(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui32(sf.RoundingMode.MIN).to_bytes()
60+
assert sf.Float32.from_ui32(o.to_ui32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5861

5962

6063
def test_f32_to_ui64() -> None:
6164
f: float = 12.3
6265
o: sf.Float32 = sf.Float32.from_float(f)
6366
assert sf.f32_to_ui64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
6467
assert sf.f32_to_ui64(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui64(sf.RoundingMode.MIN).to_bytes()
68+
assert sf.Float32.from_ui64(o.to_ui64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
6569

6670

6771
def test_f32_to_i32() -> None:
6872
f: float = -12.3
6973
o: sf.Float32 = sf.Float32.from_float(f)
7074
assert sf.f32_to_i32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
7175
assert sf.f32_to_i32(o, sf.RoundingMode.MIN).to_bytes() == o.to_i32(sf.RoundingMode.MIN).to_bytes()
76+
assert sf.Float32.from_i32(o.to_i32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
7277

7378

7479
def test_f32_to_i64() -> None:
7580
f: float = -12.3
7681
o: sf.Float32 = sf.Float32.from_float(f)
7782
assert sf.f32_to_i64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
7883
assert sf.f32_to_i64(o, sf.RoundingMode.MIN).to_bytes() == o.to_i64(sf.RoundingMode.MIN).to_bytes()
84+
assert sf.Float32.from_i64(o.to_i64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
7985

8086

8187
def test_f32_to_f16() -> None:
8288
f: float = -12.5
8389
o: sf.Float32 = sf.Float32.from_float(f)
8490
assert sf.f32_to_f16(o).to_float() == f
8591
assert sf.f32_to_f16(o).to_bytes() == o.to_f16().to_bytes()
92+
assert sf.Float32.from_f16(o.to_f16()).to_bytes() == o.to_bytes()
93+
94+
95+
def test_f32_to_f32() -> None:
96+
f: float = -12.5
97+
o: sf.Float32 = sf.Float32.from_float(f)
98+
assert sf.Float32.from_f32(o.to_f32()).to_bytes() == o.to_bytes()
8699

87100

88101
def test_f32_to_f64() -> None:
89102
f: float = -12.5
90103
o: sf.Float32 = sf.Float32.from_float(f)
91104
assert sf.f32_to_f64(o).to_float() == f
92105
assert sf.f32_to_f64(o).to_bytes() == o.to_f64().to_bytes()
106+
assert sf.Float32.from_f64(o.to_f64()).to_bytes() == o.to_bytes()
93107

94108

95109
def test_f32_to_f128() -> None:
96110
f: float = -12.5
97111
o: sf.Float32 = sf.Float32.from_float(f)
98112
assert sf.f32_to_f128(o).to_float() == f
99113
assert sf.f32_to_f128(o).to_bytes() == o.to_f128().to_bytes()
114+
assert sf.Float32.from_f128(o.to_f128()).to_bytes() == o.to_bytes()
100115

101116

102117
def test_f32_round_to_int() -> None:

python/tests/softfloatpy/test_float64.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,48 +49,61 @@ def test_f64_to_ui32() -> None:
4949
o: sf.Float64 = sf.Float64.from_float(f)
5050
assert sf.f64_to_ui32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5151
assert sf.f64_to_ui32(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui32(sf.RoundingMode.MIN).to_bytes()
52+
assert sf.Float64.from_ui32(o.to_ui32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5253

5354

5455
def test_f64_to_ui64() -> None:
5556
f: float = 12.3
5657
o: sf.Float64 = sf.Float64.from_float(f)
5758
assert sf.f64_to_ui64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
5859
assert sf.f64_to_ui64(o, sf.RoundingMode.MIN).to_bytes() == o.to_ui64(sf.RoundingMode.MIN).to_bytes()
60+
assert sf.Float64.from_ui64(o.to_ui64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
5961

6062

6163
def test_f64_to_i32() -> None:
6264
f: float = -12.3
6365
o: sf.Float64 = sf.Float64.from_float(f)
6466
assert sf.f64_to_i32(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
6567
assert sf.f64_to_i32(o, sf.RoundingMode.MIN).to_bytes() == o.to_i32(sf.RoundingMode.MIN).to_bytes()
68+
assert sf.Float64.from_i32(o.to_i32(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
6669

6770

6871
def test_f64_to_i64() -> None:
6972
f: float = -12.3
7073
o: sf.Float64 = sf.Float64.from_float(f)
7174
assert sf.f64_to_i64(o, sf.RoundingMode.MIN).to_int() == math.floor(f)
7275
assert sf.f64_to_i64(o, sf.RoundingMode.MIN).to_bytes() == o.to_i64(sf.RoundingMode.MIN).to_bytes()
76+
assert sf.Float64.from_i64(o.to_i64(sf.RoundingMode.MIN)).to_bytes() == o.round_to_int(sf.RoundingMode.MIN).to_bytes()
7377

7478

7579
def test_f64_to_f16() -> None:
7680
f: float = -12.5
7781
o: sf.Float64 = sf.Float64.from_float(f)
7882
assert sf.f64_to_f16(o).to_float() == f
7983
assert sf.f64_to_f16(o).to_bytes() == o.to_f16().to_bytes()
84+
assert sf.Float64.from_f16(o.to_f16()).to_bytes() == o.to_bytes()
8085

8186

8287
def test_f64_to_f32() -> None:
8388
f: float = -12.5
8489
o: sf.Float64 = sf.Float64.from_float(f)
8590
assert sf.f64_to_f32(o).to_float() == f
8691
assert sf.f64_to_f32(o).to_bytes() == o.to_f32().to_bytes()
92+
assert sf.Float64.from_f32(o.to_f32()).to_bytes() == o.to_bytes()
93+
94+
95+
def test_f64_to_f64() -> None:
96+
f: float = -12.5
97+
o: sf.Float64 = sf.Float64.from_float(f)
98+
assert sf.Float64.from_f64(o.to_f64()).to_bytes() == o.to_bytes()
8799

88100

89101
def test_f64_to_f128() -> None:
90102
f: float = -12.5
91103
o: sf.Float64 = sf.Float64.from_float(f)
92104
assert sf.f64_to_f128(o).to_float() == f
93105
assert sf.f64_to_f128(o).to_bytes() == o.to_f128().to_bytes()
106+
assert sf.Float64.from_f128(o.to_f128()).to_bytes() == o.to_bytes()
94107

95108

96109
def test_f64_round_to_int() -> None:

python/tests/softfloatpy/test_int32.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SoftFloatPy: A Python binding of Berkeley SoftFloat.
22
#
3-
# Copyright (c) 2024-2025 Arihiro Yoshida. All rights reserved.
3+
# Copyright (c) 2024-2026 Arihiro Yoshida. All rights reserved.
44
#
55
# Permission is hereby granted, free of charge, to any person obtaining a copy
66
# of this software and associated documentation files (the "Software"), to deal
@@ -44,27 +44,31 @@ def test_i32_to_f16() -> None:
4444
o: sf.Int32 = sf.Int32.from_int(i)
4545
assert sf.i32_to_f16(o).to_float() == float(i)
4646
assert sf.i32_to_f16(o).to_bytes() == o.to_f16().to_bytes()
47+
assert sf.Int32.from_f16(o.to_f16(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
4748

4849

4950
def test_i32_to_f32() -> None:
5051
i: int = -123
5152
o: sf.Int32 = sf.Int32.from_int(i)
5253
assert sf.i32_to_f32(o).to_float() == float(i)
5354
assert sf.i32_to_f32(o).to_bytes() == o.to_f32().to_bytes()
55+
assert sf.Int32.from_f32(o.to_f32(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
5456

5557

5658
def test_i32_to_f64() -> None:
5759
i: int = -123
5860
o: sf.Int32 = sf.Int32.from_int(i)
5961
assert sf.i32_to_f64(o).to_float() == float(i)
6062
assert sf.i32_to_f64(o).to_bytes() == o.to_f64().to_bytes()
63+
assert sf.Int32.from_f64(o.to_f64(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
6164

6265

6366
def test_i32_to_f128() -> None:
6467
i: int = -123
6568
o: sf.Int32 = sf.Int32.from_int(i)
6669
assert sf.i32_to_f128(o).to_float() == float(i)
6770
assert sf.i32_to_f128(o).to_bytes() == o.to_f128().to_bytes()
71+
assert sf.Int32.from_f128(o.to_f128(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
6872

6973

7074
def test_operators() -> None:

python/tests/softfloatpy/test_int64.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SoftFloatPy: A Python binding of Berkeley SoftFloat.
22
#
3-
# Copyright (c) 2024-2025 Arihiro Yoshida. All rights reserved.
3+
# Copyright (c) 2024-2026 Arihiro Yoshida. All rights reserved.
44
#
55
# Permission is hereby granted, free of charge, to any person obtaining a copy
66
# of this software and associated documentation files (the "Software"), to deal
@@ -44,27 +44,31 @@ def test_i64_to_f16() -> None:
4444
o: sf.Int64 = sf.Int64.from_int(i)
4545
assert sf.i64_to_f16(o).to_float() == float(i)
4646
assert sf.i64_to_f16(o).to_bytes() == o.to_f16().to_bytes()
47+
assert sf.Int64.from_f16(o.to_f16(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
4748

4849

4950
def test_i64_to_f32() -> None:
5051
i: int = -123
5152
o: sf.Int64 = sf.Int64.from_int(i)
5253
assert sf.i64_to_f32(o).to_float() == float(i)
5354
assert sf.i64_to_f32(o).to_bytes() == o.to_f32().to_bytes()
55+
assert sf.Int64.from_f32(o.to_f32(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
5456

5557

5658
def test_i64_to_f64() -> None:
5759
i: int = -123
5860
o: sf.Int64 = sf.Int64.from_int(i)
5961
assert sf.i64_to_f64(o).to_float() == float(i)
6062
assert sf.i64_to_f64(o).to_bytes() == o.to_f64().to_bytes()
63+
assert sf.Int64.from_f64(o.to_f64(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
6164

6265

6366
def test_i64_to_f128() -> None:
6467
i: int = -123
6568
o: sf.Int64 = sf.Int64.from_int(i)
6669
assert sf.i64_to_f128(o).to_float() == float(i)
6770
assert sf.i64_to_f128(o).to_bytes() == o.to_f128().to_bytes()
71+
assert sf.Int64.from_f128(o.to_f128(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
6872

6973

7074
def test_operators() -> None:

python/tests/softfloatpy/test_uint32.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SoftFloatPy: A Python binding of Berkeley SoftFloat.
22
#
3-
# Copyright (c) 2024-2025 Arihiro Yoshida. All rights reserved.
3+
# Copyright (c) 2024-2026 Arihiro Yoshida. All rights reserved.
44
#
55
# Permission is hereby granted, free of charge, to any person obtaining a copy
66
# of this software and associated documentation files (the "Software"), to deal
@@ -44,27 +44,31 @@ def test_ui32_to_f16() -> None:
4444
o: sf.UInt32 = sf.UInt32.from_int(i)
4545
assert sf.ui32_to_f16(o).to_float() == float(i)
4646
assert sf.ui32_to_f16(o).to_bytes() == o.to_f16().to_bytes()
47+
assert sf.UInt32.from_f16(o.to_f16(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
4748

4849

4950
def test_ui32_to_f32() -> None:
5051
i: int = 123
5152
o: sf.UInt32 = sf.UInt32.from_int(i)
5253
assert sf.ui32_to_f32(o).to_float() == float(i)
5354
assert sf.ui32_to_f32(o).to_bytes() == o.to_f32().to_bytes()
55+
assert sf.UInt32.from_f32(o.to_f32(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
5456

5557

5658
def test_ui32_to_f64() -> None:
5759
i: int = 123
5860
o: sf.UInt32 = sf.UInt32.from_int(i)
5961
assert sf.ui32_to_f64(o).to_float() == float(i)
6062
assert sf.ui32_to_f64(o).to_bytes() == o.to_f64().to_bytes()
63+
assert sf.UInt32.from_f64(o.to_f64(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
6164

6265

6366
def test_ui32_to_f128() -> None:
6467
i: int = 123
6568
o: sf.UInt32 = sf.UInt32.from_int(i)
6669
assert sf.ui32_to_f128(o).to_float() == float(i)
6770
assert sf.ui32_to_f128(o).to_bytes() == o.to_f128().to_bytes()
71+
assert sf.UInt32.from_f128(o.to_f128(), sf.RoundingMode.MIN).to_bytes() == o.to_bytes()
6872

6973

7074
def test_operators() -> None:

0 commit comments

Comments
 (0)