|
15 | 15 | import base64 |
16 | 16 | from builtins import int |
17 | 17 |
|
| 18 | +import math |
18 | 19 | import pytest |
19 | 20 |
|
20 | 21 | import asn1 |
@@ -422,6 +423,34 @@ def test_real(self): |
422 | 423 | enc.write(0.15625) |
423 | 424 | res = enc.output() |
424 | 425 | assert res == b'\x09\x03\x80\xFB\x05' |
| 426 | + enc.start() |
| 427 | + enc.write(1.0) |
| 428 | + res = enc.output() |
| 429 | + assert res == b'\x09\x03\x80\x00\x01' |
| 430 | + enc.start() |
| 431 | + enc.write(-1.0) |
| 432 | + res = enc.output() |
| 433 | + assert res == b'\x09\x03\xC0\x00\x01' |
| 434 | + enc.start() |
| 435 | + enc.write(2.0) |
| 436 | + res = enc.output() |
| 437 | + assert res == b'\x09\x03\x80\x01\x01' |
| 438 | + enc.start() |
| 439 | + enc.write(0.5) |
| 440 | + res = enc.output() |
| 441 | + assert res == b'\x09\x03\x80\xFF\x01' |
| 442 | + enc.start() |
| 443 | + enc.write(10.5) |
| 444 | + res = enc.output() |
| 445 | + assert res == b'\x09\x03\x80\xFF\x15' |
| 446 | + enc.start() |
| 447 | + enc.write(-3.25) |
| 448 | + res = enc.output() |
| 449 | + assert res == b'\x09\x03\xC0\xFE\x0D' |
| 450 | + enc.start() |
| 451 | + enc.write(1024.0) |
| 452 | + res = enc.output() |
| 453 | + assert res == b'\x09\x03\x80\x0A\x01' |
425 | 454 |
|
426 | 455 | class TestDecoder(object): |
427 | 456 | """Test suite for ASN1 Decoder.""" |
@@ -1156,6 +1185,102 @@ def test_mix_context_universal(self): |
1156 | 1185 |
|
1157 | 1186 | assert dec.peek() is None |
1158 | 1187 |
|
| 1188 | + def test_real_zero(self): |
| 1189 | + buf = b'\x09\x00' |
| 1190 | + enc = asn1.Decoder() |
| 1191 | + enc.start(buf) |
| 1192 | + tag, value = enc.read() |
| 1193 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1194 | + assert isinstance(value, float) |
| 1195 | + assert value == 0.0 |
| 1196 | + |
| 1197 | + def test_real_negative_zero(self): |
| 1198 | + buf = b'\x09\x01\x43' |
| 1199 | + enc = asn1.Decoder() |
| 1200 | + enc.start(buf) |
| 1201 | + tag, value = enc.read() |
| 1202 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1203 | + assert isinstance(value, float) |
| 1204 | + assert value == 0.0 and math.copysign(1, value) == -1.0 |
| 1205 | + |
| 1206 | + def test_real_negative_infinite(self): |
| 1207 | + buf = b'\x09\x01\x41' |
| 1208 | + enc = asn1.Decoder() |
| 1209 | + enc.start(buf) |
| 1210 | + tag, value = enc.read() |
| 1211 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1212 | + assert isinstance(value, float) |
| 1213 | + assert value == float('-inf') |
| 1214 | + |
| 1215 | + def test_real_positive_infinite(self): |
| 1216 | + buf = b'\x09\x01\x40' |
| 1217 | + enc = asn1.Decoder() |
| 1218 | + enc.start(buf) |
| 1219 | + tag, value = enc.read() |
| 1220 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1221 | + assert isinstance(value, float) |
| 1222 | + assert value == float('inf') |
| 1223 | + |
| 1224 | + def test_real_positive_nan(self): |
| 1225 | + buf = b'\x09\x01\x42' |
| 1226 | + enc = asn1.Decoder() |
| 1227 | + enc.start(buf) |
| 1228 | + tag, value = enc.read() |
| 1229 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1230 | + assert isinstance(value, float) |
| 1231 | + assert value != value |
| 1232 | + |
| 1233 | + def test_real(self): |
| 1234 | + buf = b'\x09\x03\x80\xFB\x05' |
| 1235 | + enc = asn1.Decoder() |
| 1236 | + enc.start(buf) |
| 1237 | + tag, value = enc.read() |
| 1238 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1239 | + assert isinstance(value, float) |
| 1240 | + assert value == 0.15625 |
| 1241 | + buf = b'\x09\x03\x80\x00\x01' |
| 1242 | + enc.start(buf) |
| 1243 | + tag, value = enc.read() |
| 1244 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1245 | + assert isinstance(value, float) |
| 1246 | + assert value == 1.0 |
| 1247 | + buf = b'\x09\x03\xC0\x00\x01' |
| 1248 | + enc.start(buf) |
| 1249 | + tag, value = enc.read() |
| 1250 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1251 | + assert isinstance(value, float) |
| 1252 | + assert value == -1.0 |
| 1253 | + buf = b'\x09\x03\x80\x01\x01' |
| 1254 | + enc.start(buf) |
| 1255 | + tag, value = enc.read() |
| 1256 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1257 | + assert isinstance(value, float) |
| 1258 | + assert value == 2.0 |
| 1259 | + buf = b'\x09\x03\x80\xFF\x01' |
| 1260 | + enc.start(buf) |
| 1261 | + tag, value = enc.read() |
| 1262 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1263 | + assert isinstance(value, float) |
| 1264 | + assert value == 0.5 |
| 1265 | + buf = b'\x09\x03\x80\xFF\x15' |
| 1266 | + enc.start(buf) |
| 1267 | + tag, value = enc.read() |
| 1268 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1269 | + assert isinstance(value, float) |
| 1270 | + assert value == 10.5 |
| 1271 | + buf = b'\x09\x03\xC0\xFE\x0D' |
| 1272 | + enc.start(buf) |
| 1273 | + tag, value = enc.read() |
| 1274 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1275 | + assert isinstance(value, float) |
| 1276 | + assert value == -3.25 |
| 1277 | + buf = b'\x09\x03\x80\x0A\x01' |
| 1278 | + enc.start(buf) |
| 1279 | + tag, value = enc.read() |
| 1280 | + assert tag == (asn1.Numbers.Real, asn1.Types.Primitive, asn1.Classes.Universal) |
| 1281 | + assert isinstance(value, float) |
| 1282 | + assert value == 1024.0 |
| 1283 | + |
1159 | 1284 |
|
1160 | 1285 | class TestEncoderDecoder(object): |
1161 | 1286 | """Test suite for ASN1 Encoder and Decoder.""" |
|
0 commit comments