| 45 | U32 TestStruct::smIdx = 0; |
| 46 | |
| 47 | TEST(Swizzle, Swizzle) |
| 48 | { |
| 49 | //------------------------------------------------------------------------ |
| 50 | // Debugger-Observable Functionality Tests |
| 51 | //------------------------------------------------------------------------ |
| 52 | U8 simpleBuffer[] = { 0, 1, 2, 3 }; |
| 53 | U8 simpleTest[] = { 0, 1, 2, 3 }; |
| 54 | |
| 55 | #define RESET_SIMPLE() dMemcpy( simpleTest, simpleBuffer, sizeof( simpleBuffer ) ) |
| 56 | |
| 57 | //------------------------------------------------------------------------ |
| 58 | // No-switch test |
| 59 | dsize_t noSwzl4[] = { 0, 1, 2, 3 }; |
| 60 | Swizzle<U8,4> noSwizzle4( noSwzl4 ); |
| 61 | |
| 62 | noSwizzle4.InPlace( simpleTest, sizeof( simpleTest ) ); |
| 63 | EXPECT_EQ( dMemcmp( simpleTest, simpleBuffer, sizeof( simpleBuffer ) ), 0 ) |
| 64 | << "No-switch test failed!"; |
| 65 | RESET_SIMPLE(); |
| 66 | |
| 67 | //------------------------------------------------------------------------ |
| 68 | // No-brainer RGBA->BGRA test |
| 69 | dsize_t bgraSwzl[] = { 2, 1, 0, 3 }; |
| 70 | Swizzle<U8,4> bgraSwizzle( bgraSwzl ); |
| 71 | |
| 72 | U8 bgraTest[] = { 2, 1, 0, 3 }; |
| 73 | bgraSwizzle.InPlace( simpleTest, sizeof( simpleTest ) ); |
| 74 | EXPECT_EQ( dMemcmp( simpleTest, bgraTest, sizeof( bgraTest ) ), 0 ) |
| 75 | << "U8 RGBA->BGRA test failed"; |
| 76 | |
| 77 | //------------------------------------------------------------------------ |
| 78 | // Reverse test |
| 79 | bgraSwizzle.InPlace( simpleTest, sizeof( simpleTest ) ); |
| 80 | EXPECT_EQ( dMemcmp( simpleTest, simpleBuffer, sizeof( simpleBuffer ) ), 0 ) |
| 81 | << "U8 RGBA->BGRA reverse test failed"; |
| 82 | |
| 83 | RESET_SIMPLE(); |
| 84 | |
| 85 | //------------------------------------------------------------------------ |
| 86 | // Object support test |
| 87 | Swizzle<TestStruct,4> bgraObjSwizzle( bgraSwzl ); |
| 88 | { |
| 89 | U32 objIdx[] = { 0, 1, 2, 3 }; |
| 90 | |
| 91 | FrameTemp<TestStruct> objTest( sizeof( objIdx ) / sizeof( U32 ) ); |
| 92 | FrameTemp<U32> randData( sizeof( objIdx ) / sizeof( U32 ) ); |
| 93 | |
| 94 | bool same = true; |
| 95 | |
| 96 | for( U32 i = 0; i < sizeof( objIdx ) / sizeof( U32 ); i++ ) |
| 97 | { |
| 98 | // Make random data and assign it |
| 99 | randData[i] = gRandGen.randI(); |
| 100 | objTest[i].Data( randData[i] ); |
| 101 | |
| 102 | // Continue object sanity check |
| 103 | same &= ( objTest[i].Idx() == objIdx[i] ); |
| 104 | } |