blob: c91eb9580be79aa374fcec5094f0c7a19dee2573 [file] [log] [blame]
<%def name="test_opivv_opivx(dtype, op, src1, src2, rs1, ref_vv, ref_vx)">
<%
def to_carr_str(arr):
return ", ".join(("%s" % x for x in arr))
src1 = to_carr_str(src1)
src2 = to_carr_str(src2)
ref_vv = to_carr_str(ref_vv)
ref_vx = to_carr_str(ref_vx)
%>
namespace softrvv_${op}_test {
namespace {
${dtype} src1[] = {${src1}};
${dtype} src2[] = {${src2}};
${dtype} rs1 = ${rs1};
const ${dtype} kAVL = sizeof(src1)/sizeof(src1[0]);
${dtype} dest[kAVL];
${dtype} ref_vv[] = {${ref_vv}};
${dtype} ref_vx[] = {${ref_vx}};
template <typename T>
void assert_vec_elem_eq(int avl, void *test_vector_1, void *test_vector_2) {
T *ptr_vec_1 = reinterpret_cast<T *>(test_vector_1);
T *ptr_vec_2 = reinterpret_cast<T *>(test_vector_2);
for (int idx = 0; idx < avl; idx++) {
ASSERT_EQ(ptr_vec_1[idx], ptr_vec_2[idx]);
}
}
class SoftRvv${op.capitalize()}Test : public ::testing::Test {
protected:
void SetUp() override { memset(dest, 0, sizeof(dest)); }
};
TEST_F(SoftRvv${op.capitalize()}Test, VV) {
softrvv::${op}_vv<${dtype}>(dest, src1, src2, kAVL);
assert_vec_elem_eq<${dtype}>(kAVL, dest, ref_vv);
}
TEST_F(SoftRvv${op.capitalize()}Test, VX) {
softrvv::${op}_vx<${dtype}>(dest, src1, &rs1, kAVL);
assert_vec_elem_eq<${dtype}>(kAVL, dest, ref_vx);
}
} // namespace
} // namespace softrvv_${op}_test
</%def>