avutil/float_dsp: add test for vector_dmac_scalar
authorJames Almer <jamrial@gmail.com>
Mon, 10 Apr 2017 15:12:55 +0000 (12:12 -0300)
committerJames Almer <jamrial@gmail.com>
Mon, 10 Apr 2017 15:16:30 +0000 (12:16 -0300)
libavutil/tests/float_dsp.c

index 053324d..7dc98c5 100644 (file)
@@ -144,6 +144,26 @@ static int test_vector_fmul_scalar(AVFloatDSPContext *fdsp, AVFloatDSPContext *c
     return ret;
 }
 
+#define ARBITRARY_DMAC_SCALAR_CONST 0.005
+static int test_vector_dmac_scalar(AVFloatDSPContext *fdsp, AVFloatDSPContext *cdsp,
+                                   const double *v1, const double *src0, double scale)
+{
+    LOCAL_ALIGNED(32, double, cdst, [LEN]);
+    LOCAL_ALIGNED(32, double, odst, [LEN]);
+    int ret;
+
+    memcpy(cdst, v1, LEN * sizeof(*v1));
+    memcpy(odst, v1, LEN * sizeof(*v1));
+
+    cdsp->vector_dmac_scalar(cdst, src0, scale, LEN);
+    fdsp->vector_dmac_scalar(odst, src0, scale, LEN);
+
+    if (ret = compare_doubles(cdst, odst, LEN, ARBITRARY_DMAC_SCALAR_CONST))
+        av_log(NULL, AV_LOG_ERROR, "vector_dmac_scalar failed\n");
+
+    return ret;
+}
+
 static int test_vector_dmul_scalar(AVFloatDSPContext *fdsp, AVFloatDSPContext *cdsp,
                                    const double *v1, double scale)
 {
@@ -262,6 +282,7 @@ int main(int argc, char **argv)
     LOCAL_ALIGNED(32, float, src2, [LEN]);
     LOCAL_ALIGNED(32, double, dbl_src0, [LEN]);
     LOCAL_ALIGNED(32, double, dbl_src1, [LEN]);
+    LOCAL_ALIGNED(32, double, dbl_src2, [LEN]);
 
     for (;;) {
         int arg = getopt(argc, argv, "s:c:");
@@ -306,6 +327,7 @@ int main(int argc, char **argv)
 
     fill_double_array(&lfg, dbl_src0, LEN);
     fill_double_array(&lfg, dbl_src1, LEN);
+    fill_double_array(&lfg, dbl_src2, LEN);
 
     if (test_vector_fmul(fdsp, cdsp, src0, src1))
         ret -= 1 << 0;
@@ -325,6 +347,8 @@ int main(int argc, char **argv)
         ret -= 1 << 7;
     if (test_vector_dmul_scalar(fdsp, cdsp, dbl_src0, dbl_src1[0]))
         ret -= 1 << 8;
+    if (test_vector_dmac_scalar(fdsp, cdsp, dbl_src2, dbl_src0, dbl_src1[0]))
+        ret -= 1 << 9;
 
 end:
     av_freep(&fdsp);