From cd8ae22c2b13837f986baeb274eeb0ef73ee403f Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 23 Nov 2024 16:27:55 +0800 Subject: [PATCH] fix a bug --- src/modules/linalg.c | 10 ++++++---- tests/80_linalg.py | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/modules/linalg.c b/src/modules/linalg.c index 5a88dccb..e2809aae 100644 --- a/src/modules/linalg.c +++ b/src/modules/linalg.c @@ -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; diff --git a/tests/80_linalg.py b/tests/80_linalg.py index 0f864683..fb29237f 100644 --- a/tests/80_linalg.py +++ b/tests/80_linalg.py @@ -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 \ No newline at end of file + e[vec2i(i, 13)] = i