ref: dd797aa20b080487cd3a2975e7d028b03039502f
parent: fdf780f72a77545e64736019732f38638c84da5b
author: Ronald S. Bultje <rsbultje@gmail.com>
date: Tue Oct 23 04:39:52 EDT 2018
Add CDEF unit test
--- /dev/null
+++ b/tests/checkasm/cdef.c
@@ -1,0 +1,69 @@
+/*
+ * Copyright © 2018, VideoLAN and dav1d authors
+ * Copyright © 2018, Two Orioles, LLC
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests/checkasm/checkasm.h"
+
+#include <string.h>
+
+#include "src/levels.h"
+#include "src/cdef.h"
+
+static void init_tmp(pixel *buf, const ptrdiff_t stride,
+ const int w, const int h)
+{
+ for (int y = 0; y < h; y++) {
+ for (int x = 0; x < w; x++)
+ buf[x] = rand() & ((1 << BITDEPTH) - 1);
+ buf += PXSTRIDE(stride);
+ }
+}
+
+static void check_cdef_direction(const cdef_dir_fn fn) {
+ ALIGN_STK_32(pixel, src, 8 * 8,);
+
+ declare_func(int, pixel *src, ptrdiff_t dst_stride, unsigned *var);
+
+ init_tmp(src, 8 * sizeof(pixel), 8, 8);
+
+ if (check_func(fn, "cdef_dir_%dbpc", BITDEPTH)) {
+ unsigned c_var, a_var;
+
+ const int c_dir = call_ref(src, 8 * sizeof(pixel), &c_var);
+ const int a_dir = call_new(src, 8 * sizeof(pixel), &a_var);
+ if (c_var != a_var || c_dir != a_dir) fail();
+ bench_new(src, 8 * sizeof(pixel), &a_var);
+ }
+ report("cdef_dir");
+}
+
+void bitfn(checkasm_check_cdef)(void) {
+ Dav1dCdefDSPContext c;
+
+ bitfn(dav1d_cdef_dsp_init)(&c);
+
+ check_cdef_direction(c.dir);
+}
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -62,6 +62,7 @@
void (*func)(void);
} tests[] = {
#if CONFIG_8BPC
+ { "cdef_8bpc", checkasm_check_cdef_8bpc },
{ "ipred_8bpc", checkasm_check_ipred_8bpc },
{ "itx_8bpc", checkasm_check_itx_8bpc },
{ "loopfilter_8bpc", checkasm_check_loopfilter_8bpc },
@@ -69,6 +70,7 @@
{ "mc_8bpc", checkasm_check_mc_8bpc },
#endif
#if CONFIG_10BPC
+ { "cdef_10bpc", checkasm_check_cdef_10bpc },
{ "ipred_10bpc", checkasm_check_ipred_10bpc },
{ "itx_10bpc", checkasm_check_itx_10bpc },
{ "loopfilter_10bpc", checkasm_check_loopfilter_10bpc },
--- a/tests/checkasm/checkasm.h
+++ b/tests/checkasm/checkasm.h
@@ -36,6 +36,9 @@
#include "include/common/attributes.h"
#include "include/common/intops.h"
+void checkasm_check_cdef_8bpc(void);
+void checkasm_check_cdef_10bpc(void);
+
void checkasm_check_ipred_8bpc(void);
void checkasm_check_ipred_10bpc(void);
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -35,6 +35,7 @@
checkasm_sources = files('checkasm/checkasm.c')
checkasm_tmpl_sources = files(
+ 'checkasm/cdef.c',
'checkasm/ipred.c',
'checkasm/itx.c',
'checkasm/loopfilter.c',