diff --git a/test/clear_system_state.h b/test/clear_system_state.h new file mode 100644 index 0000000000000000000000000000000000000000..e240981518b163dd4727d0b96233ccaed84986d4 --- /dev/null +++ b/test/clear_system_state.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2013 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. + */ +#ifndef TEST_CLEAR_SYSTEM_STATE_H_ +#define TEST_CLEAR_SYSTEM_STATE_H_ + +#include "vpx_config.h" +extern "C" { +#if ARCH_X86 || ARCH_X86_64 +# include "vpx_ports/x86.h" +#endif +} + +namespace libvpx_test { + +// Reset system to a known state. This function should be used for all non-API +// test cases. +inline void ClearSystemState() { +#if ARCH_X86 || ARCH_X86_64 + vpx_reset_mmx_state(); +#endif +} + +} // namespace libvpx_test +#endif // TEST_CLEAR_SYSTEM_STATE_H_ diff --git a/test/idct_test.cc b/test/idct_test.cc index 51fb65a4315df44c3f2afa9ed6a8122fe160ce90..659cce05fa7bdca0e256e235e8dd0a02848b7fd1 100644 --- a/test/idct_test.cc +++ b/test/idct_test.cc @@ -13,6 +13,7 @@ extern "C" { #include "./vpx_config.h" #include "./vp8_rtcd.h" } +#include "test/clear_system_state.h" #include "test/register_state_check.h" #include "third_party/googletest/src/include/gtest/gtest.h" @@ -32,6 +33,10 @@ class IDCTTest : public ::testing::TestWithParam<idct_fn_t> { output[i] = ((i & 0xF) < 4 && (i < 64)) ? 0 : -1; } + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } + idct_fn_t UUT; short input[16]; unsigned char output[256]; diff --git a/test/intrapred_test.cc b/test/intrapred_test.cc index 149399024a554c81e2bcd8ba37324431174db153..39ec89679b7fdcc02a6dc8f694bd668b585ac9b3 100644 --- a/test/intrapred_test.cc +++ b/test/intrapred_test.cc @@ -11,6 +11,7 @@ #include <string.h> #include "test/acm_random.h" +#include "test/clear_system_state.h" #include "test/register_state_check.h" #include "third_party/googletest/src/include/gtest/gtest.h" extern "C" { @@ -25,6 +26,11 @@ namespace { using libvpx_test::ACMRandom; class IntraPredBase { + public: + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } + protected: void SetupMacroblock(uint8_t *data, int block_size, int stride, int num_planes) { diff --git a/test/pp_filter_test.cc b/test/pp_filter_test.cc index 412a57442cc7ad3b2a4caf406c942a8b8352a76a..79896fe61bbadd93236b146b396026ae58005d36 100644 --- a/test/pp_filter_test.cc +++ b/test/pp_filter_test.cc @@ -7,6 +7,7 @@ * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ +#include "test/clear_system_state.h" #include "test/register_state_check.h" #include "third_party/googletest/src/include/gtest/gtest.h" extern "C" { @@ -27,7 +28,12 @@ typedef void (*post_proc_func_t)(unsigned char *src_ptr, namespace { class Vp8PostProcessingFilterTest - : public ::testing::TestWithParam<post_proc_func_t> {}; + : public ::testing::TestWithParam<post_proc_func_t> { + public: + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } +}; // Test routine for the VP8 post-processing function // vp8_post_proc_down_and_across_mb_row_c. diff --git a/test/sad_test.cc b/test/sad_test.cc index 8a90630aedecb98de5a6bb8c2346664217c59236..1f5435f2ab09256b9d54d120522da15ca1195cf3 100644 --- a/test/sad_test.cc +++ b/test/sad_test.cc @@ -26,6 +26,7 @@ extern "C" { } #include "test/acm_random.h" +#include "test/clear_system_state.h" #include "test/register_state_check.h" #include "test/util.h" #include "third_party/googletest/src/include/gtest/gtest.h" @@ -67,6 +68,10 @@ class SADTestBase : public ::testing::Test { reference_data_ = NULL; } + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } + protected: // Handle blocks up to 4 blocks 64x64 with stride up to 128 static const int kDataAlignment = 16; diff --git a/test/sixtap_predict_test.cc b/test/sixtap_predict_test.cc index 9ab7a73479d1e184a8e9dc1208321b7cb122c185..ee4faac374857d0d0d3822e6deacb654a8ff86b6 100644 --- a/test/sixtap_predict_test.cc +++ b/test/sixtap_predict_test.cc @@ -12,6 +12,7 @@ #include <stdlib.h> #include <string.h> #include "test/acm_random.h" +#include "test/clear_system_state.h" #include "test/register_state_check.h" #include "test/util.h" #include "third_party/googletest/src/include/gtest/gtest.h" @@ -48,6 +49,10 @@ class SixtapPredictTest : public PARAMS(int, int, sixtap_predict_fn_t) { dst_c_ = NULL; } + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } + protected: // Make test arrays big enough for 16x16 functions. Six-tap filters // need 5 extra pixels outside of the macroblock. diff --git a/test/subtract_test.cc b/test/subtract_test.cc index e7d107392cd2e214805ef33760ce8654403222eb..81bfb662cde8ae1b6697b77f8268681da451a0bf 100644 --- a/test/subtract_test.cc +++ b/test/subtract_test.cc @@ -10,6 +10,7 @@ #include "third_party/googletest/src/include/gtest/gtest.h" #include "test/acm_random.h" +#include "test/clear_system_state.h" #include "test/register_state_check.h" extern "C" { #include "vpx_config.h" @@ -23,7 +24,12 @@ typedef void (*subtract_b_fn_t)(BLOCK *be, BLOCKD *bd, int pitch); namespace { -class SubtractBlockTest : public ::testing::TestWithParam<subtract_b_fn_t> {}; +class SubtractBlockTest : public ::testing::TestWithParam<subtract_b_fn_t> { + public: + virtual void TearDown() { + libvpx_test::ClearSystemState(); + } +}; using libvpx_test::ACMRandom; diff --git a/test/test.mk b/test/test.mk index fe5255d3c92b1bd49d87397c5f752dc35055e2ef..806901d2756cee538650e16879b7bb2d19caf5e1 100644 --- a/test/test.mk +++ b/test/test.mk @@ -1,3 +1,4 @@ +LIBVPX_TEST_SRCS-yes += clear_system_state.h LIBVPX_TEST_SRCS-yes += register_state_check.h LIBVPX_TEST_SRCS-yes += test.mk LIBVPX_TEST_SRCS-yes += acm_random.h diff --git a/test/variance_test.cc b/test/variance_test.cc index 337980cd7384bfdfcccaf3c63912043c4f315cb0..dfa1a07c70b329af0275237651a331d9bb90e028 100644 --- a/test/variance_test.cc +++ b/test/variance_test.cc @@ -12,6 +12,8 @@ #include "third_party/googletest/src/include/gtest/gtest.h" +#include "test/clear_system_state.h" + #include "vpx/vpx_integer.h" #include "vpx_config.h" extern "C" { @@ -51,6 +53,7 @@ class VarianceTest : virtual void TearDown() { delete[] src_; delete[] ref_; + libvpx_test::ClearSystemState(); } protected: