#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
