#include <riscv_vector.h>
#include <springbok.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

#include "pw_unit_test/framework.h"
#include "softrvv.h"

namespace softrvv_vmin_test {
namespace {

// common to all tests
int32_t src1[] = {-1, 2, 3, 4, 5};

// vector test
int32_t src2[] = {5, 4, 3, 2, 1};

// scalar register tests
int32_t rs1[] = {1, 3, 5};

};  // namespace
const int32_t kAVL = sizeof(src1) / sizeof(src1[0]);
int32_t dest[kAVL];

int32_t ref_vv[] = {-1, 2, 3, 2, 1};

int32_t ref_vx[3][kAVL] = {{-1, 1, 1, 1, 1}, {-1, 2, 3, 3, 3}, {-1, 2, 3, 4, 5}};

class SoftRvvVminTest : public ::testing::Test {
 protected:
  void SetUp() override { memset(dest, 0, sizeof(dest)); }
};

TEST_F(SoftRvvVminTest, VV) {
  softrvv::vmin_vv<int32_t>(dest, src1, src2, kAVL);
  ASSERT_EQ(memcmp(dest, ref_vv, sizeof(dest)), 0);
}

TEST_F(SoftRvvVminTest, VX) {
  const int32_t num_vx_tests = sizeof(ref_vx) / sizeof(ref_vx[0]);
  for (int32_t i = 0; i < num_vx_tests; i++) {
    softrvv::vmin_vx<int32_t>(dest, src1, &rs1[i], kAVL);
    ASSERT_EQ(memcmp(dest, &ref_vx[i], sizeof(dest)), 0);
  }
}

}  // namespace softrvv_vmin_test
