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

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

namespace softrvv_vzext_test {
namespace {

uint16_t src1[] = {1, 2, 3, 4, 5};
const uint32_t AVL_CONST = sizeof(src1)/sizeof(src1[0]);
uint32_t dest[AVL_CONST];
uint32_t ref_dest[] = {1, 2, 3, 4, 5};

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

TEST_F(SoftRvvVzextTest, VF2) {
  softrvv::vzext_v<uint32_t, uint16_t>(dest, src1, AVL_CONST);
  ASSERT_EQ(memcmp(dest, ref_dest, sizeof(dest)), 0);
}

}  // namespace
}  // namespace softrvv_vzext_test
