Use template for vadd.

Change-Id: If079345dc0732f0a474b1112a81cfa445f963a2c
diff --git a/softrvv/tests/CMakeLists.txt b/softrvv/tests/CMakeLists.txt
index 565b508..b102a7d 100644
--- a/softrvv/tests/CMakeLists.txt
+++ b/softrvv/tests/CMakeLists.txt
@@ -12,17 +12,6 @@
 
 vec_cc_test(
   NAME
-    softrvv_vadd
-  SRCS
-    softrvv_vadd_test.cpp
-  DEPS
-    softrvv
-  LINKOPTS
-   -Xlinker --defsym=__itcm_length__=128K
-)
-
-vec_cc_test(
-  NAME
     softrvv_vsub
   SRCS
     softrvv_vsub_test.cpp
@@ -111,6 +100,15 @@
 
 softrvv_vec_cc_generated_test(
   NAME
+    vadd
+  TEMPLATE
+    softrvv_vadd_test.tpl.cpp
+  LINKOPTS
+   -Xlinker --defsym=__itcm_length__=128K
+)
+
+softrvv_vec_cc_generated_test(
+  NAME
     vmul
   TEMPLATE
     softrvv_vmul_test.tpl.cpp
diff --git a/softrvv/tests/softrvv_vadd_test.cpp b/softrvv/tests/softrvv_vadd_test.cpp
deleted file mode 100644
index 8a0c09e..0000000
--- a/softrvv/tests/softrvv_vadd_test.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <riscv_vector.h>
-#include <springbok.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "pw_unit_test/framework.h"
-#include "softrvv.h"
-
-namespace softrvv_vadd_test {
-namespace {
-
-uint32_t src1[] = {1, 2, 3, 4, 5};
-uint32_t src2[] = {1, 2, 3, 4, 5};
-uint32_t rs1 = 3;
-uint32_t imm = 2;
-const uint32_t AVL_CONST = sizeof(src1)/sizeof(src1[0]);
-uint32_t dest[AVL_CONST];
-
-
-uint32_t ref_vv[] = {2, 4, 6, 8, 10};
-uint32_t ref_vx[] = {4, 5, 6, 7, 8};
-uint32_t ref_vi[] = {3, 4, 5, 6, 7};
-
-class SoftRvvVaddTest : public ::testing::Test {
- protected:
-  void SetUp() override { memset(dest, 0, sizeof(dest)); }
-};
-
-TEST_F(SoftRvvVaddTest, VV) {
-  softrvv::vadd_vv<uint32_t>(dest, src1, src2, AVL_CONST);
-  ASSERT_EQ(memcmp(dest, ref_vv, sizeof(dest)), 0);
-}
-
-TEST_F(SoftRvvVaddTest, VX) {
-  softrvv::vadd_vx<uint32_t>(dest, src1, &rs1, AVL_CONST);
-  ASSERT_EQ(memcmp(dest, ref_vx, sizeof(dest)), 0);
-}
-
-TEST_F(SoftRvvVaddTest, VI) {
-  softrvv::vadd_vi<uint32_t>(dest, src1, imm, AVL_CONST);
-  ASSERT_EQ(memcmp(dest, ref_vi, sizeof(dest)), 0);
-}
-
-}  // namespace
-}  // namespace softrvv_vadd_test
diff --git a/softrvv/tests/templates/softrvv_vadd_test.tpl.cpp b/softrvv/tests/templates/softrvv_vadd_test.tpl.cpp
new file mode 100644
index 0000000..a5a6910
--- /dev/null
+++ b/softrvv/tests/templates/softrvv_vadd_test.tpl.cpp
@@ -0,0 +1,9 @@
+<%inherit file="base.tpl.cpp"/>\
+<%namespace name="tests" file="opivv_opivx_test.tpl.cpp"/>
+<%
+import numpy as np
+src1, src2, rs1 = parent.module.get_test_inputs(np.int32, N=5)
+ref_vv = src1 + src2
+ref_vx = src1 + rs1
+%>\
+${tests.test_opivv_opivx("int32_t", op, src1, src2, rs1, ref_vv, ref_vx)}