Commit a81539db by Damien George

### tests: Add further tests for mpz code.

parent 2f4e8511
 ... @@ -4,6 +4,7 @@ print(hash(False)) ... @@ -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: ... @@ -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): ... @@ -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)
 # test bignum power i = 1 << 65 print(0 ** i) print(i ** 0) print(i ** 1) print(i ** 2)
 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("Q", 2**64 - 1)) print(struct.pack("Q", 0xffffffffffffffff)) print(struct.pack("q", -1)) print(struct.pack("Q", 1234567890123456789)) print(struct.pack(">Q", 1234567890123456789)) ... ...
 ... @@ -5,6 +5,9 @@ i = 1 << 65 ... @@ -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 ... @@ -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 @@ ... @@ -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) { ... @@ -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); ... ...
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!