diff options
author | John Koleszar <jkoleszar@google.com> | 2012-05-22 11:56:31 -0700 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2012-05-22 15:00:10 -0700 |
commit | 2d225689d36128e7c7fa1351e5c725ba4830f6b2 (patch) | |
tree | 4f8c10eb6c5748e8b6cebf193a22abfc39e6893b /test | |
parent | 2bf62c1dbb191861fe50d3c71e6a51372d46327e (diff) | |
download | libvpx-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.cc | 123 | ||||
-rwxr-xr-x | test/idctllm_test.cc | 125 | ||||
-rw-r--r-- | test/test.mk | 2 |
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 |