1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/genericopenlibs/liboil/tsrc/testsuite/dct/src/dct.c Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,391 @@
1.4 +/*
1.5 +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +*
1.19 +*/
1.20 +
1.21 +
1.22 +#include <liboil/liboil.h>
1.23 +#include <liboil/liboildebug.h>
1.24 +#include <liboil/liboilfunction.h>
1.25 +#include <stdio.h>
1.26 +#include <stdlib.h>
1.27 +
1.28 +#include <liboil/globals.h>
1.29 +
1.30 +#define LOG_FILE "c:\\logs\\testsuite_dct_log.txt"
1.31 +#include "std_log_result.h"
1.32 +#include "utils.h"
1.33 +#define LOG_FILENAME_LINE __FILE__, __LINE__
1.34 +
1.35 +void create_xml(int result)
1.36 +{
1.37 + if(result)
1.38 + assert_failed = 1;
1.39 +
1.40 + testResultXml("testsuite_dct");
1.41 + close_log_file();
1.42 +}
1.43 +
1.44 +void test_oil_mdct12_f64()
1.45 + {
1.46 + //double * d_6, const double * s_12
1.47 + double output[6];
1.48 + double input[12];
1.49 + double linux_output[] = {-55.78726058370923368557,-9.77999142525906961509,8.30695505006328360764,5.45142094924720943538,-5.13339728852725407648,-4.58890662311381625216};
1.50 + int i = 0;
1.51 +
1.52 + for(i=0; i<12; i++)
1.53 + {
1.54 + input[i] = i+1;
1.55 +
1.56 + if(i<6)
1.57 + output[i] = 0;
1.58 + }
1.59 +
1.60 + oil_mdct12_f64(output, input);
1.61 +
1.62 + for(i=0; i<6; i++)
1.63 + {
1.64 + if(comparefloats(output[i], linux_output[i]))
1.65 + {
1.66 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
1.67 + assert_failed = 1;
1.68 + }
1.69 + }
1.70 + }
1.71 +
1.72 +void test_oil_imdct12_f64()
1.73 + {
1.74 + //double * d_12, const double * s_6
1.75 + double output[12];
1.76 + double input[6];
1.77 + double linux_output[] = {-4.33833397075162174872,3.40568926865829446626,-3.31124125233533384005,3.31124125233533384005,-3.40568926865828158768,4.33833397075162441325,-4.80351335916817223648,10.06982028664590167466,-10.35088397845068541869,-10.35088397845079377646,10.06982028664594963629,-4.80351335916817401284};
1.78 + int i = 0;
1.79 +
1.80 + for(i=0; i<12; i++)
1.81 + {
1.82 + output[i] = 0;
1.83 +
1.84 + if(i<6)
1.85 + input[i] = i + 1;
1.86 + }
1.87 +
1.88 + oil_imdct12_f64(output, input);
1.89 +
1.90 + for(i=0; i<12; i++)
1.91 + {
1.92 + if(comparefloats(output[i], linux_output[i]))
1.93 + {
1.94 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
1.95 + assert_failed = 1;
1.96 + }
1.97 + }
1.98 + }
1.99 +
1.100 +void test_oil_mdct36_f64()
1.101 + {
1.102 + //double * d_18, const double * s_36
1.103 + double output[18];
1.104 + double input[36];
1.105 + double linux_output[] = {-485.54509125873983066413,-79.64662612510757355722,67.80760448776190685294,39.77358393387979162981,-36.41398520030525531865,-26.85943249683056777144,25.37958877703877291765,20.73179262231989383736,-19.93414220762220523397,-17.30353399124829749667,16.83079383688368935168,15.24349952210559955290,-14.95531193252001500582,-14.00077432972704016834,13.83319274912650698184,13.31880337261293334450,-13.24130282007020475987,-13.07848679902590305346};
1.106 + int i = 0;
1.107 +
1.108 + for(i=0; i<36; i++)
1.109 + {
1.110 + input[i] = i+1;
1.111 +
1.112 + if(i<18)
1.113 + output[i] = 0;
1.114 + }
1.115 +
1.116 + oil_mdct36_f64(output, input);
1.117 +
1.118 + for(i=0; i<18; i++)
1.119 + {
1.120 + if(comparefloats(output[i], linux_output[i]))
1.121 + {
1.122 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
1.123 + assert_failed = 1;
1.124 + }
1.125 + }
1.126 + }
1.127 +
1.128 +void test_oil_imdct36_f64()
1.129 + {
1.130 + //double * d_36, const double * s_18
1.131 + double output[36];
1.132 + double input[18];
1.133 + double linux_output[] = {-12.85687531711769970855,11.41757120437667261115,-11.15646549643737905910,10.28156353478235018883,-10.12421323499659031597,9.61624441673711061185,-9.53135483275377914936,9.29662075491665795823,-9.26973797227096696361,9.26973797227097051632,-9.29662075491650519155,9.53135483275377559664,-9.61624441673730778746,10.12421323499673242452,-10.28156353478229512177,11.15646549643748208780,-11.41757120437673655999,12.85687531711769793219,-13.28789667691522780046,15.72998203713914833202,-16.48536211104631377111,21.07260369137263467110,-22.59425383526346919894,33.39775527158744949929,-37.52696988457606863676,85.41533571580391992484,-80.79110748109037842823,-80.79110748109157214003,85.41533571580409045509,-37.52696988457621074531,33.39775527158775503267,-22.59425383526349762064,21.07260369137274835794,-16.48536211104587678733,15.72998203713892451105,-13.28789667691528109117};
1.134 + int i = 0;
1.135 +
1.136 + for(i=0; i<36; i++)
1.137 + {
1.138 + output[i] = 0;
1.139 +
1.140 + if(i<18)
1.141 + input[i] = i+1;
1.142 + }
1.143 +
1.144 + oil_imdct36_f64(output, input);
1.145 +
1.146 + for(i=0; i<36; i++)
1.147 + {
1.148 + if(comparefloats(output[i], linux_output[i]))
1.149 + {
1.150 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
1.151 + assert_failed = 1;
1.152 + }
1.153 + }
1.154 + }
1.155 +
1.156 +void test_oil_dct36_f32()
1.157 + {
1.158 + //float * d_36, int dstr, const float * s_36, int sstr
1.159 + float output[36];
1.160 + float input[36];
1.161 + float linux_output[] = {2.000000,3.000000,4.000000,5.000000,6.000000,7.000000,8.000000,9.000000,10.000000,11.000000,12.000000,13.000000,14.000000,15.000000,16.000000,17.000000,18.000000,19.000000,20.000000,21.000000,22.000000,23.000000,24.000000,25.000000,26.000000,27.000000,28.000000,29.000000,30.000000,31.000000,32.000000,33.000000,34.000000,35.000000,36.000000,37.000000};
1.162 + int i = 0;
1.163 +
1.164 + for(i=0; i<36; i++)
1.165 + {
1.166 + output[i] = i+2;
1.167 + input[i] = i+1;
1.168 + }
1.169 +
1.170 + oil_dct36_f32(output, 1, input, 2);
1.171 +
1.172 + for(i=0; i<36; i++)
1.173 + {
1.174 + if(output[i] != linux_output[i])
1.175 + {
1.176 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %f, actual value - %f", i,linux_output[i],output[i]);
1.177 + assert_failed = 1;
1.178 + }
1.179 + }
1.180 + }
1.181 +
1.182 +void test_oil_fdct8x8s_s16()
1.183 + {
1.184 + //int16_t * d_8x8, int ds, const int16_t * s_8x8, int ss
1.185 + int16_t output[64];
1.186 + int16_t input[64];
1.187 + int16_t linux_output[] = {13824,-4608,-1024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
1.188 + int i = 0;
1.189 +
1.190 + for(i=0; i<64; i++)
1.191 + {
1.192 + output[i] = 0;
1.193 + input[i] = i+1;
1.194 + }
1.195 +
1.196 + oil_fdct8x8s_s16(output, 1, input, 2);
1.197 +
1.198 + for(i=0; i<64; i++)
1.199 + {
1.200 + if(output[i] != linux_output[i])
1.201 + {
1.202 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
1.203 + assert_failed = 1;
1.204 + }
1.205 + }
1.206 + }
1.207 +
1.208 +void test_oil_fdct8x8theora()
1.209 + {
1.210 + //const int16_t * s_8x8, int16_t * d_8x8
1.211 + int16_t output[64];
1.212 + int16_t input[64];
1.213 + int16_t linux_output[] = {1036,-62,0,-5,0,-5,0,-5,-582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-61,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,-20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-6,0,0,0,0,0,0,0};
1.214 + int i = 0;
1.215 +
1.216 + for(i=0; i<64; i++)
1.217 + {
1.218 + output[i] = 0;
1.219 + input[i] = i+1;
1.220 + }
1.221 +
1.222 + oil_fdct8x8theora(input, output);
1.223 +
1.224 + for(i=0; i<64; i++)
1.225 + {
1.226 + if(output[i] != linux_output[i])
1.227 + {
1.228 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
1.229 + assert_failed = 1;
1.230 + }
1.231 + }
1.232 + }
1.233 +
1.234 +void test_oil_idct8x8lim10_s16()
1.235 + {
1.236 + //int16_t * d_8x8, int dstr, const int16_t * s_8x8, int sstr
1.237 + int16_t output[64];
1.238 + int16_t input[64];
1.239 + int16_t linux_output[] = {1292,-771,768,-511,-1,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
1.240 + int i = 0;
1.241 +
1.242 + for(i=0; i<64; i++)
1.243 + {
1.244 + output[i] = 0;
1.245 + input[i] = i+1;
1.246 + }
1.247 +
1.248 + oil_idct8x8lim10_s16(output, 1, input, 2);
1.249 +
1.250 + for(i=0; i<64; i++)
1.251 + {
1.252 + if(output[i] != linux_output[i])
1.253 + {
1.254 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
1.255 + assert_failed = 1;
1.256 + }
1.257 + }
1.258 + }
1.259 +
1.260 +void test_oil_idct8theora_s16()
1.261 + {
1.262 + //int16_t * d_8, int dstr, const int16_t * s_8, int sstr
1.263 + int16_t output[8];
1.264 + int16_t input[8];
1.265 + int16_t linux_output[] = {16,-18,6,-5,5,-2,2,0};
1.266 + int i = 0;
1.267 +
1.268 + for(i=0; i<8; i++)
1.269 + {
1.270 + output[i] = 0;
1.271 + input[i] = i+1;
1.272 + }
1.273 +
1.274 + oil_idct8theora_s16(output, 1, input, 2);
1.275 +
1.276 + for(i=0; i<8; i++)
1.277 + {
1.278 + if(output[i] != linux_output[i])
1.279 + {
1.280 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
1.281 + assert_failed = 1;
1.282 + }
1.283 + }
1.284 + }
1.285 +
1.286 +void test_oil_idct8x8theora_s16()
1.287 + {
1.288 + //int16_t * d_8x8, int dstr, const int16_t * s_8x8, int sstr
1.289 + int16_t output[64];
1.290 + int16_t input[64];
1.291 + int16_t linux_output[] = {157,-123,50,-36,26,-14,10,1,-110,51,-30,12,-16,2,-10,-2,52,-31,10,-10,10,0,6,0,-34,19,-11,6,-7,1,-3,-2,26,-15,7,-4,5,-1,3,0,-14,5,-2,2,0,-2,0,-2,12,-9,2,0,6,0,4,0,-1,-1,2,-2,4,2,-2,1};
1.292 + int i = 0;
1.293 +
1.294 + for(i=0; i<64; i++)
1.295 + {
1.296 + output[i] = 0;
1.297 + input[i] = i+1;
1.298 + }
1.299 +
1.300 + oil_idct8x8theora_s16(output, 1, input, 2);
1.301 +
1.302 + for(i=0; i<64; i++)
1.303 + {
1.304 + if(output[i] != linux_output[i])
1.305 + {
1.306 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
1.307 + assert_failed = 1;
1.308 + }
1.309 + }
1.310 + }
1.311 +
1.312 +void test_oil_imdct32_f32()
1.313 + {
1.314 + //float * d_32, const float * s_32
1.315 + float output[32];
1.316 + float input[32];
1.317 + float expected_output[] = {528.00000000000000000000,-207.42237854003906250000,-0.00000000000002593932,-22.97223091125488281250,-0.00000000000002312733,-8.21512222290039062500,0.00000000000000710542,-4.14796209335327148438,-0.00000000000003045654,-2.47257304191589355469,0.00000000000000630225,-1.62263202667236328125,0.00000000000008801467,-1.13173198699951171875,-0.00000000000003877801,-0.82146918773651123047,0.00000000000035616302,-0.61161065101623535156,0.00000000000014964419,-0.46168053150177001953,0.00000000000006150462,-0.34939777851104736328,-0.00000000000018143386,-0.26159864664077758789,0.00000000000003763656,-0.19001007080078125000,-0.00000000000012429814,-0.12911282479763031006,-0.00000000000002208823,-0.07497953623533248901,-0.00000000000003485602,-0.02459304779767990112};
1.318 + int i = 0;
1.319 +
1.320 + for(i=0; i<32; i++)
1.321 + {
1.322 + input[i] = i+1;
1.323 + output[i] = 0;
1.324 + }
1.325 +
1.326 + oil_imdct32_f32(output, input);
1.327 +
1.328 + for(i=0; i<32; i++)
1.329 + {
1.330 + if(comparefloats(output[i], expected_output[i]))
1.331 + {
1.332 + std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,expected_output[i],output[i]);
1.333 + assert_failed = 1;
1.334 + }
1.335 + }
1.336 + }
1.337 +
1.338 +int main (int argc, char *argv[])
1.339 +{
1.340 + oil_init ();
1.341 +
1.342 + std_log(LOG_FILENAME_LINE,"START oil_mdct12_f64 TEST");
1.343 + test_oil_mdct12_f64(); //fails because of float precision diff
1.344 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.345 +
1.346 + std_log(LOG_FILENAME_LINE,"START oil_imdct12_f64 TEST");
1.347 + test_oil_imdct12_f64(); //fails because of float precision diff
1.348 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.349 +
1.350 + std_log(LOG_FILENAME_LINE,"START oil_mdct36_f64 TEST");
1.351 + test_oil_mdct36_f64(); //fails because of float precision diff
1.352 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.353 +
1.354 + std_log(LOG_FILENAME_LINE,"START oil_imdct36_f64 TEST");
1.355 + test_oil_imdct36_f64(); //fails because of float precision diff
1.356 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.357 +
1.358 + std_log(LOG_FILENAME_LINE,"START oil_dct36_f32 TEST");
1.359 + test_oil_dct36_f32();
1.360 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.361 +
1.362 + std_log(LOG_FILENAME_LINE,"START oil_fdct8x8s_s16 TEST");
1.363 + test_oil_fdct8x8s_s16();
1.364 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.365 +
1.366 + std_log(LOG_FILENAME_LINE,"START oil_fdct8x8theora TEST");
1.367 + test_oil_fdct8x8theora();
1.368 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.369 +
1.370 + std_log(LOG_FILENAME_LINE,"START oil_idct8x8lim10_s16 TEST");
1.371 + test_oil_idct8x8lim10_s16();
1.372 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.373 +
1.374 + std_log(LOG_FILENAME_LINE,"START oil_idct8theora_s16 TEST");
1.375 + test_oil_idct8theora_s16();
1.376 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.377 +
1.378 + std_log(LOG_FILENAME_LINE,"START oil_idct8x8theora_s16 TEST");
1.379 + test_oil_idct8x8theora_s16();
1.380 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.381 +
1.382 + std_log(LOG_FILENAME_LINE,"START oil_imdct32_f32 TEST");
1.383 + test_oil_imdct32_f32(); //getting different output than linux
1.384 + std_log(LOG_FILENAME_LINE,"END TEST\n");
1.385 +
1.386 + if(assert_failed)
1.387 + std_log(LOG_FILENAME_LINE,"Test Failed");
1.388 + else
1.389 + std_log(LOG_FILENAME_LINE,"Test Successful");
1.390 +
1.391 + create_xml(0);
1.392 + return 0;
1.393 +}
1.394 +