From b826466e12d0947397a98378d1032742dc80a651 Mon Sep 17 00:00:00 2001 From: Weiqi <weltch1997@gmail.com> Date: Fri, 24 Feb 2023 19:40:04 -0500 Subject: [PATCH] update vector --- include/vector.h | 14 ++++++------- src/vector.c | 31 ++++++++++++++++++++-------- tests/test_vector.c | 49 +++++++++++++++++++++++---------------------- 3 files changed, 55 insertions(+), 39 deletions(-) diff --git a/include/vector.h b/include/vector.h index 27c1c5c..24a72dd 100644 --- a/include/vector.h +++ b/include/vector.h @@ -4,18 +4,18 @@ #include "field.h" #include "group.h" -typedef zp *zp_vec; -typedef g *g_vec; +typedef zp* zp_vec; +typedef g* g_vec; -void vector_zp_from_int(zp_vec x, int *int_vec, int length); +zp_vec vector_zp_from_int(int *int_vec, int size); -void vector_zp_rand(zp_vec x, int length); +zp_vec vector_zp_rand(int size); -void vector_merge(zp_vec r, zp_vec a, zp_vec b, int size_a, int size_b); +zp_vec vector_merge(zp_vec a, zp_vec b, int size_a, int size_b); -void vector_add(zp_vec r, zp_vec a, zp_vec b, int size); +zp_vec vector_add(zp_vec a, zp_vec b, int size); -void vector_raise(g base, zp_vec x, g_vec gx, int size); +g_vec vector_raise(g base, zp_vec x, int size); void inner_product(gt r, g_vec a, g_vec b, int size); diff --git a/src/vector.c b/src/vector.c index 43ac6d0..e23b434 100644 --- a/src/vector.c +++ b/src/vector.c @@ -1,24 +1,39 @@ #include "vector.h" -void vector_zp_from_int(zp_vec x, int *int_vec, int length) { - for (int i = 0; i < length; i++) zp_from_int(x[i], int_vec[i]); +zp_vec vector_zp_from_int(int *int_vec, int size) { + zp_vec x; + x = (zp_vec) malloc(sizeof(zp) * size); + for (int i = 0; i < size; i++) zp_from_int(x[i], int_vec[i]); + return x; } -void vector_zp_rand(zp_vec x, int length) { - for (int i = 0; i < length; i++) rand_zp(x[i]); +zp_vec vector_zp_rand(int size) { + zp_vec x; + x = (zp_vec) malloc(sizeof(zp) * size); + for (int i = 0; i < size; i++) rand_zp(x[i]); + return x; } -void vector_merge(zp_vec r, zp_vec a, zp_vec b, int size_a, int size_b) { +zp_vec vector_merge(zp_vec a, zp_vec b, int size_a, int size_b) { + zp_vec r; + r = (zp_vec) malloc(sizeof(zp) * (size_a + size_b)); for (int i = 0; i < size_a; i++) zp_copy(r[i], a[i]); for (int i = 0; i < size_b; i++) zp_copy(r[i + size_a], b[i]); + return r; } -void vector_add(zp_vec r, zp_vec a, zp_vec b, int size) { +zp_vec vector_add(zp_vec a, zp_vec b, int size) { + zp_vec r; + r = (zp_vec) malloc(sizeof(zp) * size); for (int i = 0; i < size; i++) zp_add(r[i], a[i], b[i]); + return r; } -void vector_raise(ep_st base[1], zp_vec x, g_vec gx, int size) { - for (int i = 0; i < size; i++) multiply(gx[i], base, x[i]); +g_vec vector_raise(ep_st base[1], zp_vec x, int size) { + g_vec r; + r = (g_vec) malloc(sizeof(g) * size); + for (int i = 0; i < size; i++) multiply(r[i], base, x[i]); + return r; } void inner_product(gt r, g_vec a, g_vec b, int size) { diff --git a/tests/test_vector.c b/tests/test_vector.c index 91e27a7..f38abb4 100644 --- a/tests/test_vector.c +++ b/tests/test_vector.c @@ -1,47 +1,48 @@ #include "vector.h" int test_zp_from_int() { - zp x[4]; + zp_vec x; int int_vec[4] = {1, 2, 3, 4}; - vector_zp_from_int(x, int_vec, 4); - return fp_cmp_dig(x[3], 4); + x = vector_zp_from_int(int_vec, 4); + return zp_is_int(x[3], 4); } int test_merge_vector() { - zp x[3], y[3], z[6]; + zp_vec x, y, z; int int_vec_x[3] = {1, 2, 3}; int int_vec_y[3] = {11, 22, 33}; - vector_zp_from_int(x, int_vec_x, 3); - vector_zp_from_int(y, int_vec_y, 3); - vector_merge(z, x, y, 3, 3); - return fp_cmp_dig(z[5], 33); + x = vector_zp_from_int(int_vec_x, 3); + y = vector_zp_from_int(int_vec_y, 3); + z = vector_merge(x, y, 3, 3); + return zp_is_int(z[5], 33); } int test_add_vector() { - zp x[3], y[3], z[3]; + zp_vec x, y, z; int int_vec_x[3] = {1, 2, 3}; int int_vec_y[3] = {11, 22, 33}; - vector_zp_from_int(x, int_vec_x, 3); - vector_zp_from_int(y, int_vec_y, 3); - vector_add(z, x, y, 3); - return fp_cmp_dig(z[2], 36); + x = vector_zp_from_int(int_vec_x, 3); + y = vector_zp_from_int(int_vec_y, 3); + z = vector_add(x, y, 3); + return zp_is_int(z[2], 36); } int test_inner_product() { - zp x[3], y[3]; + zp_vec x, y; int int_vec_x[3] = {1, 2, 3}; int int_vec_y[3] = {4, 5, 6}; - vector_zp_from_int(x, int_vec_x, 3); - vector_zp_from_int(y, int_vec_y, 3); + x = vector_zp_from_int(int_vec_x, 3); + y = vector_zp_from_int(int_vec_y, 3); - g g, gx[3], gy[3]; - generator(g); - vector_raise(g, x, gx, 3); - vector_raise(g, y, gy, 3); + g base; + g_vec gx, gy; + generator(base); + gx = vector_raise(base, x, 3); + gy = vector_raise(base, y, 3); gt b, r; inner_product(r, gx, gy, 3); - map(g, g, b); + map(base, base, b); gt_exp_dig(b, b, 32); return gt_cmp(b, r); @@ -54,9 +55,9 @@ int main() { pc_param_set_any(); // Perform tests. - if (test_zp_from_int() != RLC_EQ) return 1; - if (test_merge_vector() != RLC_EQ) return 1; - if (test_add_vector() != RLC_EQ) return 1; + if (test_zp_from_int() != 1) return 1; + if (test_merge_vector() != 1) return 1; + if (test_add_vector() != 1) return 1; if (test_inner_product() != RLC_EQ) return 1; return 0; -- GitLab