tests: clear system state after non-API calls
add ClearSystemState() to reset MMX registers avoiding corrupting
subsequent tests.
Change-Id: I668deb09aa7aa467709776e5819f936910698bc0
diff --git a/test/clear_system_state.h b/test/clear_system_state.h
new file mode 100644
index 0000000..e240981
--- /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 51fb65a..659cce0 100644
--- a/test/idct_test.cc
+++ b/test/idct_test.cc
@@ -13,6 +13,7 @@
#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 @@
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 1493990..39ec896 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 @@
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 412a574..79896fe 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 @@
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 8a90630..1f5435f 100644
--- a/test/sad_test.cc
+++ b/test/sad_test.cc
@@ -26,6 +26,7 @@
}
#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 @@
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 9ab7a73..ee4faac 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 @@
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 e7d1073..81bfb66 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 @@
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 fe5255d..806901d 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 337980c..dfa1a07 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 @@
virtual void TearDown() {
delete[] src_;
delete[] ref_;
+ libvpx_test::ClearSystemState();
}
protected: