os/ossrv/genericopenlibs/liboil/tsrc/testsuite/dct/src/dct.c
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description: 
    15 *
    16 */
    17 
    18 
    19 #include <liboil/liboil.h>
    20 #include <liboil/liboildebug.h>
    21 #include <liboil/liboilfunction.h>
    22 #include <stdio.h>
    23 #include <stdlib.h>
    24 
    25 #include <liboil/globals.h>
    26 
    27 #define LOG_FILE "c:\\logs\\testsuite_dct_log.txt"
    28 #include "std_log_result.h"
    29 #include "utils.h"
    30 #define LOG_FILENAME_LINE __FILE__, __LINE__
    31 
    32 void create_xml(int result)
    33 {
    34     if(result)
    35         assert_failed = 1;
    36     
    37     testResultXml("testsuite_dct");
    38     close_log_file();
    39 }
    40 
    41 void test_oil_mdct12_f64()
    42     {
    43     //double * d_6, const double * s_12
    44     double output[6];
    45     double input[12];
    46     double linux_output[] = {-55.78726058370923368557,-9.77999142525906961509,8.30695505006328360764,5.45142094924720943538,-5.13339728852725407648,-4.58890662311381625216};
    47     int i = 0;
    48     
    49     for(i=0; i<12; i++)
    50         {
    51         input[i] = i+1;
    52         
    53         if(i<6)
    54             output[i] = 0;
    55         }
    56     
    57     oil_mdct12_f64(output, input);
    58     
    59     for(i=0; i<6; i++)
    60         {
    61         if(comparefloats(output[i], linux_output[i]))
    62             {
    63             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
    64             assert_failed = 1; 
    65             }
    66         }
    67     }
    68 
    69 void test_oil_imdct12_f64()
    70     {
    71     //double * d_12, const double * s_6
    72     double output[12];
    73     double input[6];
    74     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};
    75     int i = 0;
    76     
    77     for(i=0; i<12; i++)
    78         {
    79         output[i] = 0;
    80         
    81         if(i<6)
    82             input[i] = i + 1;
    83         }
    84     
    85     oil_imdct12_f64(output, input);
    86     
    87     for(i=0; i<12; i++)
    88         {
    89         if(comparefloats(output[i], linux_output[i]))
    90             {
    91             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
    92             assert_failed = 1; 
    93             }
    94         }
    95     }
    96 
    97 void test_oil_mdct36_f64()
    98     {
    99     //double * d_18, const double * s_36
   100     double output[18];
   101     double input[36];
   102     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};
   103     int i = 0;
   104     
   105     for(i=0; i<36; i++)
   106         {
   107         input[i] = i+1;
   108         
   109         if(i<18)
   110             output[i] = 0;
   111         }
   112     
   113     oil_mdct36_f64(output, input);
   114     
   115     for(i=0; i<18; i++)
   116         {
   117         if(comparefloats(output[i], linux_output[i]))
   118             {
   119             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
   120             assert_failed = 1; 
   121             }
   122         }
   123     }
   124 
   125 void test_oil_imdct36_f64()
   126     {
   127     //double * d_36, const double * s_18
   128     double output[36];
   129     double input[18];
   130     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};
   131     int i = 0;
   132     
   133     for(i=0; i<36; i++)
   134         {
   135         output[i] = 0;
   136         
   137         if(i<18)
   138             input[i] = i+1;
   139         }
   140     
   141     oil_imdct36_f64(output, input);
   142     
   143     for(i=0; i<36; i++)
   144         {
   145         if(comparefloats(output[i], linux_output[i]))
   146             {
   147             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,linux_output[i],output[i]);
   148             assert_failed = 1; 
   149             }
   150         }
   151     }
   152 
   153 void test_oil_dct36_f32()
   154     {
   155     //float * d_36, int dstr, const float * s_36, int sstr
   156     float output[36];
   157     float input[36];
   158     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};
   159     int i = 0;
   160     
   161     for(i=0; i<36; i++)
   162         {
   163         output[i] = i+2;
   164         input[i] = i+1;
   165         }
   166     
   167     oil_dct36_f32(output, 1, input, 2);
   168     
   169     for(i=0; i<36; i++)
   170         {
   171         if(output[i] != linux_output[i])
   172             {
   173             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %f, actual value - %f", i,linux_output[i],output[i]);
   174             assert_failed = 1; 
   175             }
   176         }
   177     }
   178 
   179 void test_oil_fdct8x8s_s16()
   180     {
   181     //int16_t * d_8x8, int ds, const int16_t * s_8x8, int ss
   182     int16_t output[64];
   183     int16_t input[64];
   184     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};
   185     int i = 0;
   186     
   187     for(i=0; i<64; i++)
   188         {
   189         output[i] = 0;
   190         input[i] = i+1;
   191         }
   192     
   193     oil_fdct8x8s_s16(output, 1, input, 2);
   194     
   195     for(i=0; i<64; i++)
   196         {
   197         if(output[i] != linux_output[i])
   198             {
   199             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
   200             assert_failed = 1; 
   201             }
   202         }
   203     }
   204 
   205 void test_oil_fdct8x8theora()
   206     {
   207     //const int16_t * s_8x8, int16_t * d_8x8
   208     int16_t output[64];
   209     int16_t input[64];
   210     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};
   211     int i = 0;
   212     
   213     for(i=0; i<64; i++)
   214         {
   215         output[i] = 0;
   216         input[i] = i+1;
   217         }
   218     
   219     oil_fdct8x8theora(input, output);
   220     
   221     for(i=0; i<64; i++)
   222         {
   223         if(output[i] != linux_output[i])
   224             {
   225             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
   226             assert_failed = 1; 
   227             }
   228         }
   229     }
   230 
   231 void test_oil_idct8x8lim10_s16()
   232     {
   233     //int16_t * d_8x8, int dstr, const int16_t * s_8x8, int sstr
   234     int16_t output[64];
   235     int16_t input[64];
   236     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};
   237     int i = 0;
   238     
   239     for(i=0; i<64; i++)
   240         {
   241         output[i] = 0;
   242         input[i] = i+1;
   243         }
   244     
   245     oil_idct8x8lim10_s16(output, 1, input, 2);
   246     
   247     for(i=0; i<64; i++)
   248         {
   249         if(output[i] != linux_output[i])
   250             {
   251             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
   252             assert_failed = 1; 
   253             }
   254         }
   255     }
   256 
   257 void test_oil_idct8theora_s16()
   258     {
   259     //int16_t * d_8, int dstr, const int16_t * s_8, int sstr
   260     int16_t output[8];
   261     int16_t input[8];
   262     int16_t linux_output[] = {16,-18,6,-5,5,-2,2,0};
   263     int i = 0;
   264     
   265     for(i=0; i<8; i++)
   266         {
   267         output[i] = 0;
   268         input[i] = i+1;
   269         }
   270     
   271     oil_idct8theora_s16(output, 1, input, 2);
   272     
   273     for(i=0; i<8; i++)
   274         {
   275         if(output[i] != linux_output[i])
   276             {
   277             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
   278             assert_failed = 1; 
   279             }
   280         }
   281     }
   282 
   283 void test_oil_idct8x8theora_s16()
   284     {
   285     //int16_t * d_8x8, int dstr, const int16_t * s_8x8, int sstr
   286     int16_t output[64];
   287     int16_t input[64];
   288     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};
   289     int i = 0;
   290     
   291     for(i=0; i<64; i++)
   292         {
   293         output[i] = 0;
   294         input[i] = i+1;
   295         }
   296     
   297     oil_idct8x8theora_s16(output, 1, input, 2);
   298     
   299     for(i=0; i<64; i++)
   300         {
   301         if(output[i] != linux_output[i])
   302             {
   303             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %d, actual value - %d", i,linux_output[i],output[i]);
   304             assert_failed = 1; 
   305             }
   306         }
   307     }
   308 
   309 void test_oil_imdct32_f32()
   310     {
   311     //float * d_32, const float * s_32
   312     float output[32];
   313     float input[32];
   314     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};
   315     int i = 0;
   316     
   317     for(i=0; i<32; i++)
   318         {
   319         input[i] = i+1;
   320         output[i] = 0;
   321         }
   322     
   323     oil_imdct32_f32(output, input);
   324     
   325     for(i=0; i<32; i++)
   326         {
   327         if(comparefloats(output[i], expected_output[i]))
   328             {
   329             std_log(LOG_FILENAME_LINE, "output[%d]: expected value - %15.14f, actual value - %15.14f", i,expected_output[i],output[i]);
   330             assert_failed = 1; 
   331             }
   332         }
   333     }
   334 
   335 int main (int argc, char *argv[])
   336 {
   337     oil_init ();
   338  
   339 	std_log(LOG_FILENAME_LINE,"START oil_mdct12_f64 TEST");
   340     test_oil_mdct12_f64(); //fails because of float precision diff
   341 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   342 
   343 	std_log(LOG_FILENAME_LINE,"START oil_imdct12_f64 TEST");
   344     test_oil_imdct12_f64(); //fails because of float precision diff
   345 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   346 
   347 	std_log(LOG_FILENAME_LINE,"START oil_mdct36_f64 TEST");
   348     test_oil_mdct36_f64(); //fails because of float precision diff
   349 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   350 
   351 	std_log(LOG_FILENAME_LINE,"START oil_imdct36_f64 TEST");
   352     test_oil_imdct36_f64(); //fails because of float precision diff
   353 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   354     
   355 	std_log(LOG_FILENAME_LINE,"START oil_dct36_f32 TEST");
   356     test_oil_dct36_f32();
   357 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   358 
   359 	std_log(LOG_FILENAME_LINE,"START oil_fdct8x8s_s16 TEST");
   360     test_oil_fdct8x8s_s16();
   361 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   362 
   363 	std_log(LOG_FILENAME_LINE,"START oil_fdct8x8theora TEST");
   364     test_oil_fdct8x8theora();
   365 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   366 
   367 	std_log(LOG_FILENAME_LINE,"START oil_idct8x8lim10_s16 TEST");
   368     test_oil_idct8x8lim10_s16();
   369 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   370 
   371 	std_log(LOG_FILENAME_LINE,"START oil_idct8theora_s16 TEST");
   372     test_oil_idct8theora_s16();
   373 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   374 
   375 	std_log(LOG_FILENAME_LINE,"START oil_idct8x8theora_s16 TEST");
   376     test_oil_idct8x8theora_s16();
   377 	std_log(LOG_FILENAME_LINE,"END TEST\n");
   378 
   379 	std_log(LOG_FILENAME_LINE,"START oil_imdct32_f32 TEST");
   380     test_oil_imdct32_f32(); //getting different output than linux
   381     std_log(LOG_FILENAME_LINE,"END TEST\n");
   382 
   383     if(assert_failed)
   384       std_log(LOG_FILENAME_LINE,"Test Failed");
   385     else
   386       std_log(LOG_FILENAME_LINE,"Test Successful");
   387     
   388     create_xml(0);
   389     return 0;
   390 }
   391