idct_test.cc revision 1b362b15af34006e6a11974088a46d42b903418e
11b362b15af34006e6a11974088a46d42b903418eJohann/* 21b362b15af34006e6a11974088a46d42b903418eJohann * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 31b362b15af34006e6a11974088a46d42b903418eJohann * 41b362b15af34006e6a11974088a46d42b903418eJohann * Use of this source code is governed by a BSD-style license 51b362b15af34006e6a11974088a46d42b903418eJohann * that can be found in the LICENSE file in the root of the source 61b362b15af34006e6a11974088a46d42b903418eJohann * tree. An additional intellectual property rights grant can be found 71b362b15af34006e6a11974088a46d42b903418eJohann * in the file PATENTS. All contributing project authors may 81b362b15af34006e6a11974088a46d42b903418eJohann * be found in the AUTHORS file in the root of the source tree. 91b362b15af34006e6a11974088a46d42b903418eJohann */ 101b362b15af34006e6a11974088a46d42b903418eJohann 111b362b15af34006e6a11974088a46d42b903418eJohann 121b362b15af34006e6a11974088a46d42b903418eJohannextern "C" { 131b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h" 141b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_rtcd.h" 151b362b15af34006e6a11974088a46d42b903418eJohann} 161b362b15af34006e6a11974088a46d42b903418eJohann#include "third_party/googletest/src/include/gtest/gtest.h" 171b362b15af34006e6a11974088a46d42b903418eJohann 181b362b15af34006e6a11974088a46d42b903418eJohanntypedef void (*idct_fn_t)(short *input, unsigned char *pred_ptr, 191b362b15af34006e6a11974088a46d42b903418eJohann int pred_stride, unsigned char *dst_ptr, 201b362b15af34006e6a11974088a46d42b903418eJohann int dst_stride); 211b362b15af34006e6a11974088a46d42b903418eJohannnamespace { 221b362b15af34006e6a11974088a46d42b903418eJohannclass IDCTTest : public ::testing::TestWithParam<idct_fn_t> 231b362b15af34006e6a11974088a46d42b903418eJohann{ 241b362b15af34006e6a11974088a46d42b903418eJohann protected: 251b362b15af34006e6a11974088a46d42b903418eJohann virtual void SetUp() 261b362b15af34006e6a11974088a46d42b903418eJohann { 271b362b15af34006e6a11974088a46d42b903418eJohann int i; 281b362b15af34006e6a11974088a46d42b903418eJohann 291b362b15af34006e6a11974088a46d42b903418eJohann UUT = GetParam(); 301b362b15af34006e6a11974088a46d42b903418eJohann memset(input, 0, sizeof(input)); 311b362b15af34006e6a11974088a46d42b903418eJohann /* Set up guard blocks */ 321b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 331b362b15af34006e6a11974088a46d42b903418eJohann output[i] = ((i&0xF)<4&&(i<64))?0:-1; 341b362b15af34006e6a11974088a46d42b903418eJohann } 351b362b15af34006e6a11974088a46d42b903418eJohann 361b362b15af34006e6a11974088a46d42b903418eJohann idct_fn_t UUT; 371b362b15af34006e6a11974088a46d42b903418eJohann short input[16]; 381b362b15af34006e6a11974088a46d42b903418eJohann unsigned char output[256]; 391b362b15af34006e6a11974088a46d42b903418eJohann unsigned char predict[256]; 401b362b15af34006e6a11974088a46d42b903418eJohann}; 411b362b15af34006e6a11974088a46d42b903418eJohann 421b362b15af34006e6a11974088a46d42b903418eJohannTEST_P(IDCTTest, TestGuardBlocks) 431b362b15af34006e6a11974088a46d42b903418eJohann{ 441b362b15af34006e6a11974088a46d42b903418eJohann int i; 451b362b15af34006e6a11974088a46d42b903418eJohann 461b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 471b362b15af34006e6a11974088a46d42b903418eJohann if((i&0xF) < 4 && i<64) 481b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(0, output[i]) << i; 491b362b15af34006e6a11974088a46d42b903418eJohann else 501b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(255, output[i]); 511b362b15af34006e6a11974088a46d42b903418eJohann} 521b362b15af34006e6a11974088a46d42b903418eJohann 531b362b15af34006e6a11974088a46d42b903418eJohannTEST_P(IDCTTest, TestAllZeros) 541b362b15af34006e6a11974088a46d42b903418eJohann{ 551b362b15af34006e6a11974088a46d42b903418eJohann int i; 561b362b15af34006e6a11974088a46d42b903418eJohann 571b362b15af34006e6a11974088a46d42b903418eJohann UUT(input, output, 16, output, 16); 581b362b15af34006e6a11974088a46d42b903418eJohann 591b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 601b362b15af34006e6a11974088a46d42b903418eJohann if((i&0xF) < 4 && i<64) 611b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(0, output[i]) << "i==" << i; 621b362b15af34006e6a11974088a46d42b903418eJohann else 631b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(255, output[i]) << "i==" << i; 641b362b15af34006e6a11974088a46d42b903418eJohann} 651b362b15af34006e6a11974088a46d42b903418eJohann 661b362b15af34006e6a11974088a46d42b903418eJohannTEST_P(IDCTTest, TestAllOnes) 671b362b15af34006e6a11974088a46d42b903418eJohann{ 681b362b15af34006e6a11974088a46d42b903418eJohann int i; 691b362b15af34006e6a11974088a46d42b903418eJohann 701b362b15af34006e6a11974088a46d42b903418eJohann input[0] = 4; 711b362b15af34006e6a11974088a46d42b903418eJohann UUT(input, output, 16, output, 16); 721b362b15af34006e6a11974088a46d42b903418eJohann 731b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 741b362b15af34006e6a11974088a46d42b903418eJohann if((i&0xF) < 4 && i<64) 751b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(1, output[i]) << "i==" << i; 761b362b15af34006e6a11974088a46d42b903418eJohann else 771b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(255, output[i]) << "i==" << i; 781b362b15af34006e6a11974088a46d42b903418eJohann} 791b362b15af34006e6a11974088a46d42b903418eJohann 801b362b15af34006e6a11974088a46d42b903418eJohannTEST_P(IDCTTest, TestAddOne) 811b362b15af34006e6a11974088a46d42b903418eJohann{ 821b362b15af34006e6a11974088a46d42b903418eJohann int i; 831b362b15af34006e6a11974088a46d42b903418eJohann 841b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 851b362b15af34006e6a11974088a46d42b903418eJohann predict[i] = i; 861b362b15af34006e6a11974088a46d42b903418eJohann 871b362b15af34006e6a11974088a46d42b903418eJohann input[0] = 4; 881b362b15af34006e6a11974088a46d42b903418eJohann UUT(input, predict, 16, output, 16); 891b362b15af34006e6a11974088a46d42b903418eJohann 901b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 911b362b15af34006e6a11974088a46d42b903418eJohann if((i&0xF) < 4 && i<64) 921b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(i+1, output[i]) << "i==" << i; 931b362b15af34006e6a11974088a46d42b903418eJohann else 941b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(255, output[i]) << "i==" << i; 951b362b15af34006e6a11974088a46d42b903418eJohann} 961b362b15af34006e6a11974088a46d42b903418eJohann 971b362b15af34006e6a11974088a46d42b903418eJohannTEST_P(IDCTTest, TestWithData) 981b362b15af34006e6a11974088a46d42b903418eJohann{ 991b362b15af34006e6a11974088a46d42b903418eJohann int i; 1001b362b15af34006e6a11974088a46d42b903418eJohann 1011b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<16; i++) 1021b362b15af34006e6a11974088a46d42b903418eJohann input[i] = i; 1031b362b15af34006e6a11974088a46d42b903418eJohann 1041b362b15af34006e6a11974088a46d42b903418eJohann UUT(input, output, 16, output, 16); 1051b362b15af34006e6a11974088a46d42b903418eJohann 1061b362b15af34006e6a11974088a46d42b903418eJohann for(i=0; i<256; i++) 1071b362b15af34006e6a11974088a46d42b903418eJohann if((i&0xF) > 3 || i>63) 1081b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(255, output[i]) << "i==" << i; 1091b362b15af34006e6a11974088a46d42b903418eJohann else if(i == 0) 1101b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(11, output[i]) << "i==" << i; 1111b362b15af34006e6a11974088a46d42b903418eJohann else if(i == 34) 1121b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(1, output[i]) << "i==" << i; 1131b362b15af34006e6a11974088a46d42b903418eJohann else if(i == 2 || i == 17 || i == 32) 1141b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(3, output[i]) << "i==" << i; 1151b362b15af34006e6a11974088a46d42b903418eJohann else 1161b362b15af34006e6a11974088a46d42b903418eJohann EXPECT_EQ(0, output[i]) << "i==" << i; 1171b362b15af34006e6a11974088a46d42b903418eJohann} 1181b362b15af34006e6a11974088a46d42b903418eJohann 1191b362b15af34006e6a11974088a46d42b903418eJohannINSTANTIATE_TEST_CASE_P(C, IDCTTest, 1201b362b15af34006e6a11974088a46d42b903418eJohann ::testing::Values(vp8_short_idct4x4llm_c)); 1211b362b15af34006e6a11974088a46d42b903418eJohann#if HAVE_MMX 1221b362b15af34006e6a11974088a46d42b903418eJohannINSTANTIATE_TEST_CASE_P(MMX, IDCTTest, 1231b362b15af34006e6a11974088a46d42b903418eJohann ::testing::Values(vp8_short_idct4x4llm_mmx)); 1241b362b15af34006e6a11974088a46d42b903418eJohann#endif 1251b362b15af34006e6a11974088a46d42b903418eJohann} 126