Enable keyword substitution on remaining files with $Id$ lines.
[platform/upstream/libvorbis.git] / test / test.c
index 8edead6..1d2a16c 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: vorbis coded test suite using vorbisfile
- last mod: $Id: test.c 13293 2007-07-24 00:09:47Z erikd $
+ last mod: $Id$
 
  ********************************************************************/
 
 #include "util.h"
 #include "write_read.h"
 
-#define DATA_LEN       2048
+#define DATA_LEN        2048
 
-#define MAX(a,b)       ((a) > (b) ? (a) : (b))
+#define MAX(a,b)        ((a) > (b) ? (a) : (b))
 
 
-static int check_output (const float * data_in, unsigned len);
+static int check_output (const float * data_in, unsigned len, float allowable);
 
 int
 main(void){
@@ -38,28 +38,36 @@ main(void){
   int sample_rates [] = { 44100, 48000, 32000, 22050, 16000, 96000 } ;
   unsigned k ;
   int errors = 0 ;
+  int ch;
 
   gen_windowed_sine (data_out, ARRAY_LEN (data_out), 0.95);
 
-  for (k = 0 ; k < ARRAY_LEN (sample_rates); k ++) {
-       char filename [64] ;
-       snprintf (filename, sizeof (filename), "vorbis_%u.oga", sample_rates [k]);
-
-       printf ("    %-20s : ", filename);
-       fflush (stdout);
-
-       /* Set to know value. */
-       set_data_in (data_in, ARRAY_LEN (data_in), 3.141);
-
-       write_vorbis_data_or_die (filename, sample_rates [k], data_out, ARRAY_LEN (data_out));
-       read_vorbis_data_or_die (filename, sample_rates [k], data_in, ARRAY_LEN (data_in));
-
-       if (check_output (data_in, ARRAY_LEN (data_in)) != 0)
-         errors ++ ;
-       else {
-         puts ("ok");
-      remove (filename);
-       }
+  for(ch=1;ch<=8;ch++){
+    float q=-.05;
+    printf("\nTesting %d channel%s\n\n",ch,ch==1?"":"s");
+    while(q<1.){
+      for (k = 0 ; k < ARRAY_LEN (sample_rates); k ++) {
+        char filename [64] ;
+        snprintf (filename, sizeof (filename), "vorbis_%dch_q%.1f_%u.ogg", ch,q*10,sample_rates [k]);
+
+        printf ("    %-20s : ", filename);
+        fflush (stdout);
+
+        /* Set to know value. */
+        set_data_in (data_in, ARRAY_LEN (data_in), 3.141);
+
+        write_vorbis_data_or_die (filename, sample_rates [k], q, data_out, ARRAY_LEN (data_out),ch);
+        read_vorbis_data_or_die (filename, sample_rates [k], data_in, ARRAY_LEN (data_in));
+
+        if (check_output (data_in, ARRAY_LEN (data_in), (.15f - .1f*q)) != 0)
+          errors ++ ;
+        else {
+          puts ("ok");
+          remove (filename);
+        }
+      }
+      q+=.1;
+    }
   }
 
   if (errors)
@@ -69,7 +77,7 @@ main(void){
 }
 
 static int
-check_output (const float * data_in, unsigned len)
+check_output (const float * data_in, unsigned len, float allowable)
 {
   float max_abs = 0.0 ;
   unsigned k ;
@@ -78,11 +86,11 @@ check_output (const float * data_in, unsigned len)
     float temp = fabs (data_in [k]);
     max_abs = MAX (max_abs, temp);
   }
-       
-  if (max_abs < 0.9) {
+
+  if (max_abs < 0.95-allowable) {
     printf ("Error : max_abs (%f) too small.\n", max_abs);
     return 1 ;
-  } else if (max_abs > 1.0) {
+  } else if (max_abs > .95+allowable) {
     printf ("Error : max_abs (%f) too big.\n", max_abs);
     return 1 ;
   }