tests: Add further tests for mpz code.
This commit is contained in:
parent
2f4e8511cd
commit
a81539db25
|
@ -4,6 +4,7 @@ print(hash(False))
|
||||||
print(hash(True))
|
print(hash(True))
|
||||||
print({():1}) # hash tuple
|
print({():1}) # hash tuple
|
||||||
print({1 << 66:1}) # hash big int
|
print({1 << 66:1}) # hash big int
|
||||||
|
print({-(1 << 66):2}) # hash negative big int
|
||||||
print(hash in {hash:1}) # hash function
|
print(hash in {hash:1}) # hash function
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -16,3 +16,16 @@ try:
|
||||||
1 in i
|
1 in i
|
||||||
except TypeError:
|
except TypeError:
|
||||||
print("TypeError")
|
print("TypeError")
|
||||||
|
|
||||||
|
# overflow because rhs of >> is being converted to machine int
|
||||||
|
try:
|
||||||
|
1 >> i
|
||||||
|
except OverflowError:
|
||||||
|
print('OverflowError')
|
||||||
|
|
||||||
|
# to test conversion of negative mpz to machine int
|
||||||
|
# (we know << will convert to machine int, even though it fails to do the shift)
|
||||||
|
try:
|
||||||
|
i << (-(i >> 40))
|
||||||
|
except ValueError:
|
||||||
|
print('ValueError')
|
||||||
|
|
|
@ -15,3 +15,6 @@ for i in range(8):
|
||||||
print(-100000000000000000000000000002 >> i)
|
print(-100000000000000000000000000002 >> i)
|
||||||
print(-100000000000000000000000000003 >> i)
|
print(-100000000000000000000000000003 >> i)
|
||||||
print(-100000000000000000000000000004 >> i)
|
print(-100000000000000000000000000004 >> i)
|
||||||
|
|
||||||
|
# shl by zero
|
||||||
|
print((1<<70) << 0)
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# test bignum power
|
||||||
|
|
||||||
|
i = 1 << 65
|
||||||
|
|
||||||
|
print(0 ** i)
|
||||||
|
print(i ** 0)
|
||||||
|
print(i ** 1)
|
||||||
|
print(i ** 2)
|
|
@ -1,3 +1,6 @@
|
||||||
i = 123456789012345678901234567890
|
i = 123456789012345678901234567890
|
||||||
print(i >> 1)
|
print(i >> 1)
|
||||||
print(i >> 1000)
|
print(i >> 1000)
|
||||||
|
|
||||||
|
# result needs rounding up
|
||||||
|
print(-(1<<70) >> 80)
|
||||||
|
|
|
@ -35,8 +35,11 @@ print(struct.pack("<I", 0xffffffff))
|
||||||
|
|
||||||
# long long ints
|
# long long ints
|
||||||
print(struct.pack("<Q", 2**64 - 1))
|
print(struct.pack("<Q", 2**64 - 1))
|
||||||
|
print(struct.pack(">Q", 2**64 - 1))
|
||||||
print(struct.pack("<Q", 0xffffffffffffffff))
|
print(struct.pack("<Q", 0xffffffffffffffff))
|
||||||
|
print(struct.pack(">Q", 0xffffffffffffffff))
|
||||||
print(struct.pack("<q", -1))
|
print(struct.pack("<q", -1))
|
||||||
|
print(struct.pack(">q", -1))
|
||||||
print(struct.pack("<Q", 1234567890123456789))
|
print(struct.pack("<Q", 1234567890123456789))
|
||||||
print(struct.pack("<q", -1234567890123456789))
|
print(struct.pack("<q", -1234567890123456789))
|
||||||
print(struct.pack(">Q", 1234567890123456789))
|
print(struct.pack(">Q", 1234567890123456789))
|
||||||
|
|
|
@ -5,6 +5,9 @@ i = 1 << 65
|
||||||
# convert bignum to float on rhs
|
# convert bignum to float on rhs
|
||||||
print("%.5g" % (2.0 * i))
|
print("%.5g" % (2.0 * i))
|
||||||
|
|
||||||
|
# negative bignum as float
|
||||||
|
print("%.5g" % float(-i))
|
||||||
|
|
||||||
# this should convert to float
|
# this should convert to float
|
||||||
print("%.5g" % (i / 5))
|
print("%.5g" % (i / 5))
|
||||||
|
|
||||||
|
|
|
@ -27,3 +27,8 @@ ementation
|
||||||
(start=1, stop=2, step=3)
|
(start=1, stop=2, step=3)
|
||||||
# str
|
# str
|
||||||
1
|
1
|
||||||
|
# mpz
|
||||||
|
1
|
||||||
|
12345678
|
||||||
|
0
|
||||||
|
0
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "py/obj.h"
|
#include "py/obj.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "py/repl.h"
|
#include "py/repl.h"
|
||||||
|
#include "py/mpz.h"
|
||||||
|
|
||||||
#if defined(MICROPY_UNIX_COVERAGE)
|
#if defined(MICROPY_UNIX_COVERAGE)
|
||||||
|
|
||||||
|
@ -83,6 +84,29 @@ STATIC mp_obj_t extra_coverage(void) {
|
||||||
printf("%d\n", MP_OBJ_IS_QSTR(mp_obj_str_intern(mp_obj_new_str("intern me", 9, false))));
|
printf("%d\n", MP_OBJ_IS_QSTR(mp_obj_str_intern(mp_obj_new_str("intern me", 9, false))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mpz
|
||||||
|
{
|
||||||
|
printf("# mpz\n");
|
||||||
|
|
||||||
|
mp_uint_t value;
|
||||||
|
mpz_t mpz;
|
||||||
|
mpz_init_zero(&mpz);
|
||||||
|
|
||||||
|
// mpz_as_uint_checked, with success
|
||||||
|
mpz_set_from_int(&mpz, 12345678);
|
||||||
|
printf("%d\n", mpz_as_uint_checked(&mpz, &value));
|
||||||
|
printf("%d\n", (int)value);
|
||||||
|
|
||||||
|
// mpz_as_uint_checked, with negative arg
|
||||||
|
mpz_set_from_int(&mpz, -1);
|
||||||
|
printf("%d\n", mpz_as_uint_checked(&mpz, &value));
|
||||||
|
|
||||||
|
// mpz_as_uint_checked, with overflowing arg
|
||||||
|
mpz_set_from_int(&mpz, 1);
|
||||||
|
mpz_shl_inpl(&mpz, &mpz, 70);
|
||||||
|
printf("%d\n", mpz_as_uint_checked(&mpz, &value));
|
||||||
|
}
|
||||||
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_0(extra_coverage_obj, extra_coverage);
|
MP_DEFINE_CONST_FUN_OBJ_0(extra_coverage_obj, extra_coverage);
|
||||||
|
|
Loading…
Reference in New Issue