Better external sub ordering
[xy_vsfilter.git] / test / unit_test / test_subsample_and_interlace.h
blobce31654b029a66089abfd63110cff5440cc30d85
1 #ifndef __TEST_SUBSAMPLE_AND_INTERLACE_34786202_B970_4091_AC4A_4F4137124732_H__
2 #define __TEST_SUBSAMPLE_AND_INTERLACE_34786202_B970_4091_AC4A_4F4137124732_H__
4 #include <gtest/gtest.h>
5 #include <wtypes.h>
6 #include <cmath>
7 #include <sstream>
8 #include <ostream>
9 #include <iomanip>
10 #include "xy_malloc.h"
11 #include "xy_intrinsics.h"
12 #include "subpic_alphablend_test_data.h"
15 class SubSampleAndInterlaceTest : public ::testing::Test
17 protected:
18 virtual void SetUp()
22 const UV_TestData& GetZeroData(int w)
24 data1.w = w;
25 data1.FillZero();
26 return data1;
28 const UV_TestData& GetRandomData(int w)
30 data1.w = w;
31 FillRandByte( data1.u, w );
32 FillRandByte( data1.v, w );
33 return data1;
35 void FillRandByte(BYTE* buf, int size)
37 for (int i=0;i<size;i++)
39 buf[i] = rand() & 0xff;
43 // virtual void TearDown() {}
44 UV_TestData data1;
45 //A_Y_UV_TestData data2[20];
46 //A_Y_UV_TestData data3[20];
50 TEST_F(SubSampleAndInterlaceTest, Check_subsample_and_interlace_2_line)
52 UV_TestData data0,data1,data2;
54 for (int i=0;i<10000;i++)
56 for (int w=16;w<33*16;w+=16)
58 //zero
59 data0 = GetZeroData(w*2);
60 data1 = data0;
61 data2 = data1;
63 subsample_and_interlace_2_line_c( data1.u, data1.u, data1.v, w, w );
64 subsample_and_interlace_2_line_sse2( data2.u, data2.u, data2.v, w, w );
66 ASSERT_EQ(true, data1==data0)
67 <<"data0"<<data0
68 <<"data1"<<data1
69 <<"data2"<<data2;
70 ASSERT_EQ(true, data2==data0)
71 <<"data0"<<data0
72 <<"data1"<<data1
73 <<"data2"<<data2;
75 //random
76 data0 = GetRandomData(w*2);
77 data1 = data0;
78 data2 = data1;
80 subsample_and_interlace_2_line_c( data1.u, data1.u, data1.v, w, w );
81 subsample_and_interlace_2_line_sse2( data2.u, data2.u, data2.v, w, w );
83 ASSERT_EQ(true, data1==data2)
84 <<"data0"<<data0
85 <<"data1"<<data1
86 <<"data2"<<data2;
88 //large input test
89 int w = 960;
90 data0 = GetRandomData(w*2);
91 data1 = data0;
92 data2 = data1;
94 subsample_and_interlace_2_line_c( data1.u, data1.u, data1.v, w, w );
95 subsample_and_interlace_2_line_sse2( data2.u, data2.u, data2.v, w, w );
97 ASSERT_EQ(true, data1==data2)
98 <<"data0"<<data0
99 <<"data1"<<data1
100 <<"data2"<<data2;
104 TEST_F(SubSampleAndInterlaceTest, Check_hleft_vmid_subsample_and_interlace_2_line)
106 UV_TestData data0,data1,data2;
108 for (int i=0;i<1000;i++)
110 for (int pitch=16;pitch<=160;pitch+=16)
112 int w = pitch;
113 //for (int w=pitch-15;w<=pitch;w++)
115 //zero
116 data0 = GetZeroData(pitch*2);
117 data1 = data0;
118 data2 = data1;
120 hleft_vmid_subsample_and_interlace_2_line_c( data1.u, data1.u, data1.v, w, pitch );
121 hleft_vmid_subsample_and_interlace_2_line_sse2( data2.u, data2.u, data2.v, w, pitch );
123 ASSERT_EQ(true, data1==data0)
124 <<"pitch:"<<pitch<<" w:"<<w<<std::endl
125 <<"data0"<<data0
126 <<"data1"<<data1
127 <<"data2"<<data2;
128 ASSERT_EQ(true, data2==data0)
129 <<"pitch:"<<pitch<<" w:"<<w<<std::endl
130 <<"data0"<<data0
131 <<"data1"<<data1
132 <<"data2"<<data2;
134 //random
135 data0 = GetRandomData(pitch*2);
136 data1 = data0;
137 data2 = data1;
139 hleft_vmid_subsample_and_interlace_2_line_c( data1.u, data1.u, data1.v, w, pitch );
140 hleft_vmid_subsample_and_interlace_2_line_sse2( data2.u, data2.u, data2.v, w, pitch );
142 ASSERT_EQ(true, data1==data2)
143 <<"pitch:"<<pitch<<" w:"<<w<<std::endl
144 <<"data0"<<data0
145 <<"data1"<<data1
146 <<"data2"<<data2;
150 //large input test
151 int w = 960;
152 data0 = GetRandomData(w*2);
153 data1 = data0;
154 data2 = data1;
156 hleft_vmid_subsample_and_interlace_2_line_c( data1.u, data1.u, data1.v, w, w );
157 hleft_vmid_subsample_and_interlace_2_line_sse2( data2.u, data2.u, data2.v, w, w );
159 ASSERT_EQ(true, data1==data2)
160 <<"data0"<<data0;
164 #endif // __TEST_SUBSAMPLE_AND_INTERLACE_34786202_B970_4091_AC4A_4F4137124732_H__