summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2012-05-22 11:56:31 -0700
committerJohn Koleszar <jkoleszar@google.com>2012-05-22 15:00:10 -0700
commit2d225689d36128e7c7fa1351e5c725ba4830f6b2 (patch)
tree4f8c10eb6c5748e8b6cebf193a22abfc39e6893b /test
parent2bf62c1dbb191861fe50d3c71e6a51372d46327e (diff)
downloadlibvpx-2d225689d36128e7c7fa1351e5c725ba4830f6b2.tar
libvpx-2d225689d36128e7c7fa1351e5c725ba4830f6b2.tar.gz
libvpx-2d225689d36128e7c7fa1351e5c725ba4830f6b2.tar.bz2
libvpx-2d225689d36128e7c7fa1351e5c725ba4830f6b2.zip
Move all tests to test/ directory
Consolodate the unit tests under vp8/ to the test/ directory Change-Id: I6d6a0fb60f5e3874a4d6710e9e121dd3e81a93db
Diffstat (limited to 'test')
-rw-r--r--test/boolcoder_test.cc123
-rwxr-xr-xtest/idctllm_test.cc125
-rw-r--r--test/test.mk2
3 files changed, 250 insertions, 0 deletions
diff --git a/test/boolcoder_test.cc b/test/boolcoder_test.cc
new file mode 100644
index 000000000..00c2b7593
--- /dev/null
+++ b/test/boolcoder_test.cc
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2012 The WebM project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+extern "C"
+{
+#include "vp8/encoder/boolhuff.h"
+#include "vp8/decoder/dboolhuff.h"
+}
+
+#include <math.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "third_party/googletest/src/include/gtest/gtest.h"
+
+typedef unsigned char uint8_t;
+
+namespace
+{
+const int num_tests = 10;
+
+class ACMRandom
+{
+public:
+ ACMRandom(int seed) { Reset(seed);}
+
+ void Reset(int seed) { srand(seed); }
+
+ uint8_t Rand8(void) { return (rand() >> 8) & 0xff; }
+
+ int PseudoUniform(int range) { return (rand() >> 8) % range; }
+
+ int operator()(int n) { return PseudoUniform(n); }
+
+ static int DeterministicSeed(void) { return 0xbaba; }
+};
+}
+
+TEST(VP8, TestBitIO)
+{
+ ACMRandom rnd(ACMRandom::DeterministicSeed());
+ for (int n = 0; n < num_tests; ++n)
+ {
+ for (int method = 0; method <= 7; ++method)
+ { // we generate various proba
+ const int bits_to_test = 1000;
+
+ uint8_t probas[bits_to_test];
+
+ for (int i = 0; i < bits_to_test; ++i)
+ {
+ const int parity = i & 1;
+ probas[i] =
+ (method == 0) ? 0 :
+ (method == 1) ? 255 :
+ (method == 2) ? 128 :
+ (method == 3) ? rnd.Rand8() :
+ (method == 4) ? (parity ? 0 : 255) :
+ // alternate between low and high proba:
+ (method == 5) ? (parity ? rnd(128) : 255 - rnd(128)) :
+ (method == 6) ?
+ (parity ? rnd(64) : 255 - rnd(64)) :
+ (parity ? rnd(32) : 255 - rnd(32));
+ }
+ for (int bit_method = 0; bit_method <= 3; ++bit_method)
+ {
+ const int random_seed = 6432;
+ const int buffer_size = 10000;
+ ACMRandom bit_rnd(random_seed);
+ BOOL_CODER bw;
+ uint8_t bw_buffer[buffer_size];
+ vp8_start_encode(&bw, bw_buffer, bw_buffer + buffer_size);
+
+ int bit = (bit_method == 0) ? 0 : (bit_method == 1) ? 1 : 0;
+ for (int i = 0; i < bits_to_test; ++i)
+ {
+ if (bit_method == 2)
+ {
+ bit = (i & 1);
+ }
+ else if (bit_method == 3)
+ {
+ bit = bit_rnd(2);
+ }
+ vp8_encode_bool(&bw, bit, (int) probas[i]);
+ }
+
+ vp8_stop_encode(&bw);
+
+ BOOL_DECODER br;
+ vp8dx_start_decode(&br, bw_buffer, buffer_size);
+ bit_rnd.Reset(random_seed);
+ for (int i = 0; i < bits_to_test; ++i)
+ {
+ if (bit_method == 2)
+ {
+ bit = (i & 1);
+ }
+ else if (bit_method == 3)
+ {
+ bit = bit_rnd(2);
+ }
+ GTEST_ASSERT_EQ(vp8dx_decode_bool(&br, probas[i]), bit)
+ << "pos: "
+ << i << " / " << bits_to_test << " bit_method: "
+ << bit_method << " method: " << method;
+ }
+
+ }
+ }
+ }
+}
diff --git a/test/idctllm_test.cc b/test/idctllm_test.cc
new file mode 100755
index 000000000..dd42e2299
--- /dev/null
+++ b/test/idctllm_test.cc
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+
+extern "C" {
+#include "vpx_config.h"
+#include "vpx_rtcd.h"
+}
+#include "third_party/googletest/src/include/gtest/gtest.h"
+
+typedef void (*idct_fn_t)(short *input, unsigned char *pred_ptr,
+ int pred_stride, unsigned char *dst_ptr,
+ int dst_stride);
+namespace {
+class IDCTTest : public ::testing::TestWithParam<idct_fn_t>
+{
+ protected:
+ virtual void SetUp()
+ {
+ int i;
+
+ UUT = GetParam();
+ memset(input, 0, sizeof(input));
+ /* Set up guard blocks */
+ for(i=0; i<256; i++)
+ output[i] = ((i&0xF)<4&&(i<64))?0:-1;
+ }
+
+ idct_fn_t UUT;
+ short input[16];
+ unsigned char output[256];
+ unsigned char predict[256];
+};
+
+TEST_P(IDCTTest, TestGuardBlocks)
+{
+ int i;
+
+ for(i=0; i<256; i++)
+ if((i&0xF) < 4 && i<64)
+ EXPECT_EQ(0, output[i]) << i;
+ else
+ EXPECT_EQ(255, output[i]);
+}
+
+TEST_P(IDCTTest, TestAllZeros)
+{
+ int i;
+
+ UUT(input, output, 16, output, 16);
+
+ for(i=0; i<256; i++)
+ if((i&0xF) < 4 && i<64)
+ EXPECT_EQ(0, output[i]) << "i==" << i;
+ else
+ EXPECT_EQ(255, output[i]) << "i==" << i;
+}
+
+TEST_P(IDCTTest, TestAllOnes)
+{
+ int i;
+
+ input[0] = 4;
+ UUT(input, output, 16, output, 16);
+
+ for(i=0; i<256; i++)
+ if((i&0xF) < 4 && i<64)
+ EXPECT_EQ(1, output[i]) << "i==" << i;
+ else
+ EXPECT_EQ(255, output[i]) << "i==" << i;
+}
+
+TEST_P(IDCTTest, TestAddOne)
+{
+ int i;
+
+ for(i=0; i<256; i++)
+ predict[i] = i;
+
+ input[0] = 4;
+ UUT(input, predict, 16, output, 16);
+
+ for(i=0; i<256; i++)
+ if((i&0xF) < 4 && i<64)
+ EXPECT_EQ(i+1, output[i]) << "i==" << i;
+ else
+ EXPECT_EQ(255, output[i]) << "i==" << i;
+}
+
+TEST_P(IDCTTest, TestWithData)
+{
+ int i;
+
+ for(i=0; i<16; i++)
+ input[i] = i;
+
+ UUT(input, output, 16, output, 16);
+
+ for(i=0; i<256; i++)
+ if((i&0xF) > 3 || i>63)
+ EXPECT_EQ(255, output[i]) << "i==" << i;
+ else if(i == 0)
+ EXPECT_EQ(11, output[i]) << "i==" << i;
+ else if(i == 34)
+ EXPECT_EQ(1, output[i]) << "i==" << i;
+ else if(i == 2 || i == 17 || i == 32)
+ EXPECT_EQ(3, output[i]) << "i==" << i;
+ else
+ EXPECT_EQ(0, output[i]) << "i==" << i;
+}
+
+INSTANTIATE_TEST_CASE_P(C, IDCTTest,
+ ::testing::Values(vp8_short_idct4x4llm_c));
+#if HAVE_MMX
+INSTANTIATE_TEST_CASE_P(MMX, IDCTTest,
+ ::testing::Values(vp8_short_idct4x4llm_mmx));
+#endif
+}
diff --git a/test/test.mk b/test/test.mk
index e486795e3..51382ee96 100644
--- a/test/test.mk
+++ b/test/test.mk
@@ -1,2 +1,4 @@
LIBVPX_TEST_SRCS-yes += test.mk
+LIBVPX_TEST_SRCS-yes += boolcoder_test.cc
+LIBVPX_TEST_SRCS-yes += idctllm_test.cc
LIBVPX_TEST_SRCS-yes += test_libvpx.cc