github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/rawp/librawp/src/rawp_test.cc (about) 1 // Copyright 2014 <chaishushan{AT}gmail.com>. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "rawp.h" 6 #include "test.h" 7 8 TEST(RawP, Simple) { 9 int width = 800; 10 int height = 600; 11 int channels = 3; 12 int depth = 8; 13 int data_type = kRawPDataType_UInt; 14 RawPEncodeOptions* opt = NULL; 15 16 uint8_t* rgb = new uint8_t[width*height*channels*depth/8]; 17 for(int i = 0; i < width*height*channels*depth/8; ++i) { 18 rgb[i] = i&0xFF; 19 } 20 21 RawPEncodeContext ctx; 22 int rv = rawpEncodeInit( 23 rgb, width, height, 24 channels, depth, data_type, 25 opt, 26 &ctx 27 ); 28 ASSERT_TRUE(rv != 0); 29 30 uint8_t* output = new uint8_t[ctx.MaxEncodedLength]; 31 size_t output_size = rawpEncode(&ctx, output); 32 ASSERT_TRUE(output_size > 0); 33 34 RawPHeader hdr; 35 memset(&hdr, 0, sizeof(hdr)); 36 rv = rawpDecodeHeader(output, output_size, &hdr); 37 ASSERT_TRUE(rv != 0); 38 ASSERT_TRUE(hdr.Width == width); 39 ASSERT_TRUE(hdr.Height == height); 40 ASSERT_TRUE(hdr.Channels == channels); 41 ASSERT_TRUE(hdr.Depth == depth); 42 ASSERT_TRUE(hdr.DataType == data_type); 43 44 uint8_t* rgb2 = new uint8_t[width*height*channels*depth/8]; 45 memset(rgb2, 0, width*height*channels*depth/8); 46 47 48 memset(&hdr, 0, sizeof(hdr)); 49 rv = rawpDecode( 50 output, output_size, 51 rgb2, width*height*channels*depth/8, 52 &hdr 53 ); 54 ASSERT_TRUE(rv != 0); 55 ASSERT_TRUE(hdr.Width == width); 56 ASSERT_TRUE(hdr.Height == height); 57 ASSERT_TRUE(hdr.Channels == channels); 58 ASSERT_TRUE(hdr.Depth == depth); 59 ASSERT_TRUE(hdr.DataType == data_type); 60 61 for(int i = 0; i < width*height*channels*depth/8; ++i) { 62 if(rgb[i] != rgb2[i]) { 63 ASSERT_TRUE_MSG(false, "i = %d", i); 64 } 65 } 66 } 67 68 TEST(RawP, Snappy) { 69 int width = 800; 70 int height = 600; 71 int channels = 3; 72 int depth = 8; 73 int data_type = kRawPDataType_UInt; 74 RawPEncodeOptions* opt = new RawPEncodeOptions; 75 opt->UseSnappy = 1; 76 77 uint8_t* rgb = new uint8_t[width*height*channels*depth/8]; 78 for(int i = 0; i < width*height*channels*depth/8; ++i) { 79 rgb[i] = i&0xFF; 80 } 81 82 RawPEncodeContext ctx; 83 int rv = rawpEncodeInit( 84 rgb, width, height, 85 channels, depth, data_type, 86 opt, 87 &ctx 88 ); 89 ASSERT_TRUE(rv != 0); 90 91 uint8_t* output = new uint8_t[ctx.MaxEncodedLength]; 92 size_t output_size = rawpEncode(&ctx, output); 93 ASSERT_TRUE(output_size > 0); 94 95 RawPHeader hdr; 96 memset(&hdr, 0, sizeof(hdr)); 97 rv = rawpDecodeHeader(output, output_size, &hdr); 98 ASSERT_TRUE(rv != 0); 99 ASSERT_TRUE(hdr.Width == width); 100 ASSERT_TRUE(hdr.Height == height); 101 ASSERT_TRUE(hdr.Channels == channels); 102 ASSERT_TRUE(hdr.Depth == depth); 103 ASSERT_TRUE(hdr.DataType == data_type); 104 105 ASSERT_TRUE(hdr.UseSnappy == 1); 106 107 uint8_t* rgb2 = new uint8_t[width*height*channels*depth/8]; 108 memset(rgb2, 0, width*height*channels*depth/8); 109 110 111 memset(&hdr, 0, sizeof(hdr)); 112 rv = rawpDecode( 113 output, output_size, 114 rgb2, width*height*channels*depth/8, 115 &hdr 116 ); 117 ASSERT_TRUE(rv != 0); 118 ASSERT_TRUE(hdr.Width == width); 119 ASSERT_TRUE(hdr.Height == height); 120 ASSERT_TRUE(hdr.Channels == channels); 121 ASSERT_TRUE(hdr.Depth == depth); 122 ASSERT_TRUE(hdr.DataType == data_type); 123 124 for(int i = 0; i < width*height*channels*depth/8; ++i) { 125 if(rgb[i] != rgb2[i]) { 126 ASSERT_TRUE_MSG(false, "i = %d", i); 127 } 128 } 129 } 130