xref: /aosp_15_r20/external/libjpeg-turbo/gtest/cjpeg-gtest-wrapper.cpp (revision dfc6aa5c1cfd4bc4e2018dc74aa96e29ee49c6da)
1*dfc6aa5cSAndroid Build Coastguard Worker /*
2*dfc6aa5cSAndroid Build Coastguard Worker  * Copyright 2020 The Chromium Authors. All Rights Reserved.
3*dfc6aa5cSAndroid Build Coastguard Worker  *
4*dfc6aa5cSAndroid Build Coastguard Worker  * This software is provided 'as-is', without any express or implied
5*dfc6aa5cSAndroid Build Coastguard Worker  * warranty.  In no event will the authors be held liable for any damages
6*dfc6aa5cSAndroid Build Coastguard Worker  * arising from the use of this software.
7*dfc6aa5cSAndroid Build Coastguard Worker  *
8*dfc6aa5cSAndroid Build Coastguard Worker  * Permission is granted to anyone to use this software for any purpose,
9*dfc6aa5cSAndroid Build Coastguard Worker  * including commercial applications, and to alter it and redistribute it
10*dfc6aa5cSAndroid Build Coastguard Worker  * freely, subject to the following restrictions:
11*dfc6aa5cSAndroid Build Coastguard Worker  *
12*dfc6aa5cSAndroid Build Coastguard Worker  * 1. The origin of this software must not be misrepresented; you must not
13*dfc6aa5cSAndroid Build Coastguard Worker  *    claim that you wrote the original software. If you use this software
14*dfc6aa5cSAndroid Build Coastguard Worker  *    in a product, an acknowledgment in the product documentation would be
15*dfc6aa5cSAndroid Build Coastguard Worker  *    appreciated but is not required.
16*dfc6aa5cSAndroid Build Coastguard Worker  * 2. Altered source versions must be plainly marked as such, and must not be
17*dfc6aa5cSAndroid Build Coastguard Worker  *    misrepresented as being the original software.
18*dfc6aa5cSAndroid Build Coastguard Worker  * 3. This notice may not be removed or altered from any source distribution.
19*dfc6aa5cSAndroid Build Coastguard Worker  */
20*dfc6aa5cSAndroid Build Coastguard Worker 
21*dfc6aa5cSAndroid Build Coastguard Worker #include "base/files/file.h"
22*dfc6aa5cSAndroid Build Coastguard Worker #include "base/files/file_util.h"
23*dfc6aa5cSAndroid Build Coastguard Worker #include "base/path_service.h"
24*dfc6aa5cSAndroid Build Coastguard Worker #include "gtest-utils.h"
25*dfc6aa5cSAndroid Build Coastguard Worker 
26*dfc6aa5cSAndroid Build Coastguard Worker #include <gtest/gtest.h>
27*dfc6aa5cSAndroid Build Coastguard Worker #include <string>
28*dfc6aa5cSAndroid Build Coastguard Worker 
29*dfc6aa5cSAndroid Build Coastguard Worker extern "C" int cjpeg(int argc, char *argv[]);
30*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,RGBISlow)31*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, RGBISlow) {
32*dfc6aa5cSAndroid Build Coastguard Worker 
33*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath icc_path;
34*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&icc_path, "test1.icc");
35*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
36*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
37*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
38*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_rgb_islow.jpg");
39*dfc6aa5cSAndroid Build Coastguard Worker 
40*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
41*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-rgb";
42*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "-dct";
43*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "int";
44*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "-icc";
45*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = icc_path.MaybeAsASCII();
46*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-outfile";
47*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = output_path.MaybeAsASCII();
48*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = input_image_path.MaybeAsASCII();
49*dfc6aa5cSAndroid Build Coastguard Worker 
50*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
51*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
52*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0],
53*dfc6aa5cSAndroid Build Coastguard Worker                          };
54*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
55*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(9, command_line), 0);
56*dfc6aa5cSAndroid Build Coastguard Worker 
57*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
58*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "1d44a406f61da743b5fd31c0a9abdca3";
59*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
60*dfc6aa5cSAndroid Build Coastguard Worker }
61*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,IFastOpt422)62*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, IFastOpt422) {
63*dfc6aa5cSAndroid Build Coastguard Worker 
64*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
65*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
66*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
67*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_422_ifast_opt.jpg");
68*dfc6aa5cSAndroid Build Coastguard Worker 
69*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
70*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-sample";
71*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "2x1";
72*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-dct";
73*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "fast";
74*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-opt";
75*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-outfile";
76*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = output_path.MaybeAsASCII();
77*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = input_image_path.MaybeAsASCII();
78*dfc6aa5cSAndroid Build Coastguard Worker 
79*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
80*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
81*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0],
82*dfc6aa5cSAndroid Build Coastguard Worker                          };
83*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
84*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(9, command_line), 0);
85*dfc6aa5cSAndroid Build Coastguard Worker 
86*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
87*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "2540287b79d913f91665e660303ab2c8";
88*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
89*dfc6aa5cSAndroid Build Coastguard Worker }
90*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,IFastProg420Q100)91*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, IFastProg420Q100) {
92*dfc6aa5cSAndroid Build Coastguard Worker 
93*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath scans_path;
94*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&scans_path, "test.scan");
95*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
96*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
97*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
98*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_420_q100_ifast_prog.jpg");
99*dfc6aa5cSAndroid Build Coastguard Worker 
100*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
101*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-sample";
102*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "2x2";
103*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-quality";
104*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "100";
105*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-dct";
106*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "fast";
107*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = "-scans";
108*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = scans_path.MaybeAsASCII();
109*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg9 = "-outfile";
110*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg10 = output_path.MaybeAsASCII();
111*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg11 = input_image_path.MaybeAsASCII();
112*dfc6aa5cSAndroid Build Coastguard Worker 
113*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
114*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
115*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0], &arg9[0], &arg10[0],
116*dfc6aa5cSAndroid Build Coastguard Worker                            &arg11[0]
117*dfc6aa5cSAndroid Build Coastguard Worker                          };
118*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
119*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(12, command_line), 0);
120*dfc6aa5cSAndroid Build Coastguard Worker 
121*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
122*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "0ba15f9dab81a703505f835f9dbbac6d";
123*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
124*dfc6aa5cSAndroid Build Coastguard Worker }
125*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,GrayISlow)126*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, GrayISlow) {
127*dfc6aa5cSAndroid Build Coastguard Worker 
128*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
129*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
130*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
131*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_gray_islow.jpg");
132*dfc6aa5cSAndroid Build Coastguard Worker 
133*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
134*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-gray";
135*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "-dct";
136*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "int";
137*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "-outfile";
138*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = output_path.MaybeAsASCII();
139*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = input_image_path.MaybeAsASCII();
140*dfc6aa5cSAndroid Build Coastguard Worker 
141*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
142*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
143*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0],
144*dfc6aa5cSAndroid Build Coastguard Worker                          };
145*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
146*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(7, command_line), 0);
147*dfc6aa5cSAndroid Build Coastguard Worker 
148*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
149*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "72b51f894b8f4a10b3ee3066770aa38d";
150*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
151*dfc6aa5cSAndroid Build Coastguard Worker }
152*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,IFastOpt420S)153*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, IFastOpt420S) {
154*dfc6aa5cSAndroid Build Coastguard Worker 
155*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
156*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
157*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
158*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_420s_ifast_opt.jpg");
159*dfc6aa5cSAndroid Build Coastguard Worker 
160*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
161*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-sample";
162*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "2x2";
163*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-smooth";
164*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "1";
165*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-dct";
166*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "int";
167*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = "-opt";
168*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = "-outfile";
169*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg9 = output_path.MaybeAsASCII();
170*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg10 = input_image_path.MaybeAsASCII();
171*dfc6aa5cSAndroid Build Coastguard Worker 
172*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
173*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
174*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0], &arg9[0], &arg10[0]
175*dfc6aa5cSAndroid Build Coastguard Worker                          };
176*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
177*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(11, command_line), 0);
178*dfc6aa5cSAndroid Build Coastguard Worker 
179*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
180*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "388708217ac46273ca33086b22827ed8";
181*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
182*dfc6aa5cSAndroid Build Coastguard Worker }
183*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,FloatProg3x2)184*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, FloatProg3x2) {
185*dfc6aa5cSAndroid Build Coastguard Worker 
186*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
187*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
188*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
189*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_3x2_float_prog.jpg");
190*dfc6aa5cSAndroid Build Coastguard Worker 
191*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
192*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-sample";
193*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "3x2";
194*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-dct";
195*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "float";
196*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-prog";
197*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-outfile";
198*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = output_path.MaybeAsASCII();
199*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = input_image_path.MaybeAsASCII();
200*dfc6aa5cSAndroid Build Coastguard Worker 
201*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
202*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
203*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0]
204*dfc6aa5cSAndroid Build Coastguard Worker                          };
205*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
206*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(9, command_line), 0);
207*dfc6aa5cSAndroid Build Coastguard Worker 
208*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
209*dfc6aa5cSAndroid Build Coastguard Worker #if defined(WITH_SIMD) && (defined(__i386__) || defined(__x86_64__))
210*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "343e3f8caf8af5986ebaf0bdc13b5c71";
211*dfc6aa5cSAndroid Build Coastguard Worker #else
212*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "9bca803d2042bd1eb03819e2bf92b3e5";
213*dfc6aa5cSAndroid Build Coastguard Worker #endif
214*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
215*dfc6aa5cSAndroid Build Coastguard Worker }
216*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,IFastProg3x2)217*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, IFastProg3x2) {
218*dfc6aa5cSAndroid Build Coastguard Worker 
219*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
220*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
221*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
222*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_3x2_ifast_prog.jpg");
223*dfc6aa5cSAndroid Build Coastguard Worker 
224*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
225*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-sample";
226*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "3x2";
227*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-dct";
228*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "fast";
229*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-prog";
230*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-outfile";
231*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = output_path.MaybeAsASCII();
232*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = input_image_path.MaybeAsASCII();
233*dfc6aa5cSAndroid Build Coastguard Worker 
234*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
235*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
236*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0]
237*dfc6aa5cSAndroid Build Coastguard Worker                          };
238*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
239*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(9, command_line), 0);
240*dfc6aa5cSAndroid Build Coastguard Worker 
241*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
242*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "1ee5d2c1a77f2da495f993c8c7cceca5";
243*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
244*dfc6aa5cSAndroid Build Coastguard Worker }
245*dfc6aa5cSAndroid Build Coastguard Worker 
246*dfc6aa5cSAndroid Build Coastguard Worker #ifdef C_ARITH_CODING_SUPPORTED
TEST(CJPEGTest,ISlowAri420)247*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, ISlowAri420) {
248*dfc6aa5cSAndroid Build Coastguard Worker 
249*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
250*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
251*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
252*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_420_islow_ari.jpg");
253*dfc6aa5cSAndroid Build Coastguard Worker 
254*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
255*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-dct";
256*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "int";
257*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-arithmetic";
258*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "-outfile";
259*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = output_path.MaybeAsASCII();
260*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = input_image_path.MaybeAsASCII();
261*dfc6aa5cSAndroid Build Coastguard Worker 
262*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
263*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
264*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0]
265*dfc6aa5cSAndroid Build Coastguard Worker                          };
266*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
267*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(7, command_line), 0);
268*dfc6aa5cSAndroid Build Coastguard Worker 
269*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
270*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "e986fb0a637a8d833d96e8a6d6d84ea1";
271*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
272*dfc6aa5cSAndroid Build Coastguard Worker }
273*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,ISlowProgAri444)274*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, ISlowProgAri444) {
275*dfc6aa5cSAndroid Build Coastguard Worker 
276*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
277*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
278*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
279*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_444_islow_progari.jpg");
280*dfc6aa5cSAndroid Build Coastguard Worker 
281*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
282*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-sample";
283*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "1x1";
284*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-dct";
285*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "int";
286*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-prog";
287*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-arithmetic";
288*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = "-outfile";
289*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = output_path.MaybeAsASCII();
290*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg9 = input_image_path.MaybeAsASCII();
291*dfc6aa5cSAndroid Build Coastguard Worker 
292*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
293*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
294*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0], &arg9[0]
295*dfc6aa5cSAndroid Build Coastguard Worker                          };
296*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
297*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(10, command_line), 0);
298*dfc6aa5cSAndroid Build Coastguard Worker 
299*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
300*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "0a8f1c8f66e113c3cf635df0a475a617";
301*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
302*dfc6aa5cSAndroid Build Coastguard Worker }
303*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,ISlowAri444)304*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, ISlowAri444) {
305*dfc6aa5cSAndroid Build Coastguard Worker 
306*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
307*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
308*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
309*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_444_islow_ari.jpg");
310*dfc6aa5cSAndroid Build Coastguard Worker 
311*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
312*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-dct";
313*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "int";
314*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-arithmetic";
315*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "-sample";
316*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "1x1";
317*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-outfile";
318*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = output_path.MaybeAsASCII();
319*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = input_image_path.MaybeAsASCII();
320*dfc6aa5cSAndroid Build Coastguard Worker 
321*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
322*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
323*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0]
324*dfc6aa5cSAndroid Build Coastguard Worker                          };
325*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
326*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(9, command_line), 0);
327*dfc6aa5cSAndroid Build Coastguard Worker 
328*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
329*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "dd1b827fc504feb0259894e7132585b4";
330*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
331*dfc6aa5cSAndroid Build Coastguard Worker }
332*dfc6aa5cSAndroid Build Coastguard Worker #endif
333*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,ISlowProg420)334*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, ISlowProg420) {
335*dfc6aa5cSAndroid Build Coastguard Worker 
336*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
337*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
338*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
339*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_420_islow_prog.jpg");
340*dfc6aa5cSAndroid Build Coastguard Worker 
341*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
342*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-dct";
343*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "int";
344*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-prog";
345*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "-outfile";
346*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = output_path.MaybeAsASCII();
347*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = input_image_path.MaybeAsASCII();
348*dfc6aa5cSAndroid Build Coastguard Worker 
349*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
350*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
351*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0]
352*dfc6aa5cSAndroid Build Coastguard Worker                          };
353*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
354*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(7, command_line), 0);
355*dfc6aa5cSAndroid Build Coastguard Worker 
356*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
357*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "1c4afddc05c0a43489ee54438a482d92";
358*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
359*dfc6aa5cSAndroid Build Coastguard Worker }
360*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,ISlow444)361*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, ISlow444) {
362*dfc6aa5cSAndroid Build Coastguard Worker 
363*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
364*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
365*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
366*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_444_islow.jpg");
367*dfc6aa5cSAndroid Build Coastguard Worker 
368*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
369*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-dct";
370*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "int";
371*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-sample";
372*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "1x1";
373*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "-outfile";
374*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = output_path.MaybeAsASCII();
375*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = input_image_path.MaybeAsASCII();
376*dfc6aa5cSAndroid Build Coastguard Worker 
377*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
378*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
379*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0]
380*dfc6aa5cSAndroid Build Coastguard Worker                          };
381*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
382*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(8, command_line), 0);
383*dfc6aa5cSAndroid Build Coastguard Worker 
384*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
385*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "62a8665a2e08e90c6fffa3a94b894ce2";
386*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
387*dfc6aa5cSAndroid Build Coastguard Worker }
388*dfc6aa5cSAndroid Build Coastguard Worker 
TEST(CJPEGTest,ISlowProg444)389*dfc6aa5cSAndroid Build Coastguard Worker TEST(CJPEGTest, ISlowProg444) {
390*dfc6aa5cSAndroid Build Coastguard Worker 
391*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath input_image_path;
392*dfc6aa5cSAndroid Build Coastguard Worker   GetTestFilePath(&input_image_path, "testorig.ppm");
393*dfc6aa5cSAndroid Build Coastguard Worker   base::FilePath output_path(GetTargetDirectory());
394*dfc6aa5cSAndroid Build Coastguard Worker   output_path = output_path.AppendASCII("testout_444_islow_prog.jpg");
395*dfc6aa5cSAndroid Build Coastguard Worker 
396*dfc6aa5cSAndroid Build Coastguard Worker   std::string prog_name = "cjpeg";
397*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg1 = "-dct";
398*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg2 = "int";
399*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg3 = "-prog";
400*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg4 = "-sample";
401*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg5 = "1x1";
402*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg6 = "-outfile";
403*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg7 = output_path.MaybeAsASCII();
404*dfc6aa5cSAndroid Build Coastguard Worker   std::string arg8 = input_image_path.MaybeAsASCII();
405*dfc6aa5cSAndroid Build Coastguard Worker 
406*dfc6aa5cSAndroid Build Coastguard Worker   char *command_line[] = { &prog_name[0],
407*dfc6aa5cSAndroid Build Coastguard Worker                            &arg1[0], &arg2[0], &arg3[0], &arg4[0], &arg5[0],
408*dfc6aa5cSAndroid Build Coastguard Worker                            &arg6[0], &arg7[0], &arg8[0]
409*dfc6aa5cSAndroid Build Coastguard Worker                          };
410*dfc6aa5cSAndroid Build Coastguard Worker   // Generate test image file.
411*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_EQ(cjpeg(9, command_line), 0);
412*dfc6aa5cSAndroid Build Coastguard Worker 
413*dfc6aa5cSAndroid Build Coastguard Worker   // Compare expected MD5 sum against that of test image.
414*dfc6aa5cSAndroid Build Coastguard Worker   const std::string EXPECTED_MD5 = "666ef192fff72570e332db7610e1a7d1";
415*dfc6aa5cSAndroid Build Coastguard Worker   EXPECT_TRUE(CompareFileAndMD5(output_path, EXPECTED_MD5));
416*dfc6aa5cSAndroid Build Coastguard Worker }
417