fix a bug

This commit is contained in:
blueloveTH 2024-11-23 16:27:55 +08:00
parent 72d5e4d098
commit cd8ae22c2b
2 changed files with 10 additions and 6 deletions

View File

@ -306,7 +306,9 @@ DEF_VECTOR_INT_OPS(3)
static bool vec2i__hash__(int argc, py_Ref argv) {
PY_CHECK_ARGC(1);
c11_vec2i v = py_tovec2i(argv);
uint64_t hash = ((uint64_t)v.x << 32) | (uint64_t)v.y;
uint64_t x_part = (uint32_t)v.x & 0xFFFFFFFF;
uint64_t y_part = (uint32_t)v.y & 0xFFFFFFFF;
uint64_t hash = (x_part << 32) | y_part;
py_newint(py_retval(), (py_i64)hash);
return true;
}
@ -314,9 +316,9 @@ static bool vec2i__hash__(int argc, py_Ref argv) {
static bool vec3i__hash__(int argc, py_Ref argv) {
PY_CHECK_ARGC(1);
c11_vec3i v = py_tovec3i(argv);
uint64_t x_part = (uint64_t)(v.x & 0xFFFFFF);
uint64_t y_part = (uint64_t)(v.y & 0xFFFFFF);
uint64_t z_part = (uint64_t)(v.z & 0xFFFF);
uint64_t x_part = (uint32_t)v.x & 0xFFFFFF;
uint64_t y_part = (uint32_t)v.y & 0xFFFFFF;
uint64_t z_part = (uint32_t)v.z & 0xFFFF;
uint64_t hash = (x_part << 40) | (y_part << 16) | z_part;
py_newint(py_retval(), (py_i64)hash);
return true;

View File

@ -408,15 +408,17 @@ assert x == 3.0 and y == 4.0
x, y, z = vec3(1.0, 2.0, 3.0)
assert x == 1.0 and y == 2.0 and z == 3.0
assert hash(vec2i(11, -1)) == 51539607551
assert hash(vec3i(11, -1, 0)) == 13194139467776
d = {vec2i(12, 12): 1035.313708305359, vec2i(12, 11): 2059.313708305359, vec2i(12, 13): 2059.313708305359, vec2i(11, 12): 2059.313708305359, vec2i(13, 12): 2059.313708305359, vec2i(13, 11): 3083.313708305359, vec2i(13, 13): 3083.313708305359, vec2i(14, 12): 3083.313708305359, vec2i(12, 14): 3083.313708305359, vec2i(11, 13): 3083.313708305359, vec2i(12, 10): 3083.313708305359, vec2i(11, 11): 3083.313708305359, vec2i(10, 12): 3083.313708305359, vec2i(13, 14): 4107.313708305359, vec2i(14, 13): 4107.313708305359, vec2i(14, 11): 4107.313708305359, vec2i(15, 12): 4107.313708305359, vec2i(12, 15): 4107.313708305359, vec2i(11, 14): 4107.313708305359, vec2i(13, 10): 4107.313708305359, vec2i(10, 13): 4107.313708305359, vec2i(11, 10): 4107.313708305359, vec2i(10, 11): 4107.313708305359, vec2i(12, 9): 4107.313708305359, vec2i(9, 12): 4107.313708305359, vec2i(14, 14): 5131.313708305359, vec2i(15, 13): 5131.313708305359, vec2i(13, 15): 5131.313708305359, vec2i(15, 11): 5131.313708305359, vec2i(16, 12): 5131.313708305359, vec2i(12, 16): 5131.313708305359, vec2i(11, 15): 5131.313708305359, vec2i(14, 10): 5131.313708305359, vec2i(10, 14): 5131.313708305359, vec2i(13, 9): 5131.313708305359, vec2i(9, 13): 5131.313708305359}
d[vec2i(11, 9)] = 1
e = {}
for i in range(10000):
for i in range(-1000, 10000):
e[vec2i(12, i)] = i
e[vec2i(11, i)] = i
e[vec2i(13, i)] = i
e[vec2i(i, 12)] = i
e[vec2i(i, 11)] = i
e[vec2i(i, 13)] = i
e[vec2i(i, 13)] = i