|
| 1 | +from decimal import Decimal |
| 2 | + |
1 | 3 | import jiter |
2 | 4 | import pytest |
3 | 5 | from math import inf |
@@ -144,3 +146,50 @@ def test_unicode_cache(): |
144 | 146 | jiter.cache_clear() |
145 | 147 | parsed = jiter.from_json(json) |
146 | 148 | assert parsed == {"💩": "£"} |
| 149 | + |
| 150 | + |
| 151 | +def test_json_float(): |
| 152 | + f = jiter.LosslessFloat(b'123.45') |
| 153 | + assert str(f) == '123.45' |
| 154 | + assert repr(f) == 'LosslessFloat(123.45)' |
| 155 | + assert float(f) == 123.45 |
| 156 | + assert f.as_decimal() == Decimal('123.45') |
| 157 | + assert bytes(f) == b'123.45' |
| 158 | + |
| 159 | + |
| 160 | +def test_json_float_scientific(): |
| 161 | + f = jiter.LosslessFloat(b'123e4') |
| 162 | + assert str(f) == '123e4' |
| 163 | + assert float(f) == 123e4 |
| 164 | + assert f.as_decimal() == Decimal('123e4') |
| 165 | + |
| 166 | + |
| 167 | +def test_json_float_invalid(): |
| 168 | + with pytest.raises(ValueError, match='trailing characters at line 1 column 6'): |
| 169 | + jiter.LosslessFloat(b'123.4x') |
| 170 | + |
| 171 | + |
| 172 | +def test_lossless_floats(): |
| 173 | + f = jiter.from_json(b'12.3') |
| 174 | + assert isinstance(f, float) |
| 175 | + assert f == 12.3 |
| 176 | + |
| 177 | + f = jiter.from_json(b'12.3', lossless_floats=True) |
| 178 | + assert isinstance(f, jiter.LosslessFloat) |
| 179 | + assert str(f) == '12.3' |
| 180 | + assert float(f) == 12.3 |
| 181 | + assert f.as_decimal() == Decimal('12.3') |
| 182 | + |
| 183 | + f = jiter.from_json(b'123.456789123456789e45', lossless_floats=True) |
| 184 | + assert isinstance(f, jiter.LosslessFloat) |
| 185 | + assert 123e45 < float(f) < 124e45 |
| 186 | + assert f.as_decimal() == Decimal('1.23456789123456789E+47') |
| 187 | + assert bytes(f) == b'123.456789123456789e45' |
| 188 | + assert str(f) == '123.456789123456789e45' |
| 189 | + assert repr(f) == 'LosslessFloat(123.456789123456789e45)' |
| 190 | + |
| 191 | + |
| 192 | +def test_lossless_floats_int(): |
| 193 | + v = jiter.from_json(b'123', lossless_floats=True) |
| 194 | + assert isinstance(v, int) |
| 195 | + assert v == 123 |
0 commit comments