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