annotate src/libsamplerate-0.1.8/tests/misc_test.c @ 0:c7265573341e

Import initial set of sources
author Chris Cannam
date Mon, 18 Mar 2013 14:12:14 +0000
parents
children
rev   line source
Chris@0 1 /*
Chris@0 2 ** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
Chris@0 3 **
Chris@0 4 ** This program is free software; you can redistribute it and/or modify
Chris@0 5 ** it under the terms of the GNU General Public License as published by
Chris@0 6 ** the Free Software Foundation; either version 2 of the License, or
Chris@0 7 ** (at your option) any later version.
Chris@0 8 **
Chris@0 9 ** This program is distributed in the hope that it will be useful,
Chris@0 10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 ** GNU General Public License for more details.
Chris@0 13 **
Chris@0 14 ** You should have received a copy of the GNU General Public License
Chris@0 15 ** along with this program; if not, write to the Free Software
Chris@0 16 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Chris@0 17 */
Chris@0 18
Chris@0 19 #include <stdio.h>
Chris@0 20 #include <stdlib.h>
Chris@0 21 #include <string.h>
Chris@0 22
Chris@0 23 #include <samplerate.h>
Chris@0 24
Chris@0 25 #include "util.h"
Chris@0 26
Chris@0 27 static void name_test (void) ;
Chris@0 28 static void error_test (void) ;
Chris@0 29 static void src_ratio_test (void) ;
Chris@0 30 static void zero_input_test (int converter) ;
Chris@0 31
Chris@0 32 int
Chris@0 33 main (void)
Chris@0 34 {
Chris@0 35 puts ("") ;
Chris@0 36
Chris@0 37 printf (" version : %s\n\n", src_get_version ()) ;
Chris@0 38
Chris@0 39 /* Current max converter is SRC_LINEAR. */
Chris@0 40 name_test () ;
Chris@0 41
Chris@0 42 error_test () ;
Chris@0 43
Chris@0 44 src_ratio_test () ;
Chris@0 45
Chris@0 46 zero_input_test (SRC_ZERO_ORDER_HOLD) ;
Chris@0 47 zero_input_test (SRC_LINEAR) ;
Chris@0 48 zero_input_test (SRC_SINC_FASTEST) ;
Chris@0 49
Chris@0 50 puts ("") ;
Chris@0 51 return 0 ;
Chris@0 52 } /* main */
Chris@0 53
Chris@0 54 static void
Chris@0 55 name_test (void)
Chris@0 56 { const char *name ;
Chris@0 57 int k = 0 ;
Chris@0 58
Chris@0 59 puts (" name_test :") ;
Chris@0 60
Chris@0 61 while (1)
Chris@0 62 { name = src_get_name (k) ;
Chris@0 63 if (name == NULL)
Chris@0 64 break ;
Chris@0 65 printf ("\tName %d : %s\n", k, name) ;
Chris@0 66 printf ("\tDesc %d : %s\n", k, src_get_description (k)) ;
Chris@0 67 k ++ ;
Chris@0 68 } ;
Chris@0 69
Chris@0 70 puts ("") ;
Chris@0 71
Chris@0 72 return ;
Chris@0 73 } /* name_test */
Chris@0 74
Chris@0 75 /*------------------------------------------------------------------------------
Chris@0 76 */
Chris@0 77
Chris@0 78 typedef struct
Chris@0 79 { double ratio ;
Chris@0 80 int should_pass ;
Chris@0 81 } RATIO_TEST ;
Chris@0 82
Chris@0 83 static RATIO_TEST ratio_test [] =
Chris@0 84 { { 1.0 / 256.1, 0 },
Chris@0 85 { 1.0 / 256.0, 1 },
Chris@0 86 { 1.0, 1 },
Chris@0 87 { 256.0, 1 },
Chris@0 88 { 256.1, 0 },
Chris@0 89 { -1.0, 0 }
Chris@0 90 } ;
Chris@0 91
Chris@0 92 static void
Chris@0 93 src_ratio_test (void)
Chris@0 94 { int k ;
Chris@0 95
Chris@0 96 puts (" src_ratio_test (SRC ratio must be in range [1/256, 256]):" ) ;
Chris@0 97
Chris@0 98
Chris@0 99 for (k = 0 ; k < ARRAY_LEN (ratio_test) ; k++)
Chris@0 100 { if (ratio_test [k].should_pass && src_is_valid_ratio (ratio_test [k].ratio) == 0)
Chris@0 101 { printf ("\n\nLine %d : SRC ratio %f should have passed.\n\n", __LINE__, ratio_test [k].ratio) ;
Chris@0 102 exit (1) ;
Chris@0 103 } ;
Chris@0 104 if (! ratio_test [k].should_pass && src_is_valid_ratio (ratio_test [k].ratio) != 0)
Chris@0 105 { printf ("\n\nLine %d : SRC ratio %f should not have passed.\n\n", __LINE__, ratio_test [k].ratio) ;
Chris@0 106 exit (1) ;
Chris@0 107 } ;
Chris@0 108 printf ("\t SRC ratio (%9.5f) : %s ................... ok\n", ratio_test [k].ratio,
Chris@0 109 (ratio_test [k].should_pass ? "pass" : "fail")) ;
Chris@0 110 } ;
Chris@0 111
Chris@0 112 puts ("") ;
Chris@0 113
Chris@0 114 return ;
Chris@0 115 } /* src_ratio_test */
Chris@0 116
Chris@0 117 static void
Chris@0 118 error_test (void)
Chris@0 119 { const char *errorstr ;
Chris@0 120 int k, errors = 0 ;
Chris@0 121
Chris@0 122 puts (" error_test :") ;
Chris@0 123
Chris@0 124 for (k = 0 ; 1 ; k++)
Chris@0 125 { errorstr = src_strerror (k) ;
Chris@0 126 printf ("\t%-2d : %s\n", k, errorstr) ;
Chris@0 127 if (errorstr == NULL)
Chris@0 128 { errors ++ ;
Chris@0 129 continue ;
Chris@0 130 } ;
Chris@0 131 if (strstr (errorstr, "Placeholder.") == errorstr)
Chris@0 132 break ;
Chris@0 133 } ;
Chris@0 134
Chris@0 135 if (errors != 0)
Chris@0 136 { printf ("\n\nLine %d : Missing error numbers above.\n\n", __LINE__) ;
Chris@0 137 exit (1) ;
Chris@0 138 } ;
Chris@0 139
Chris@0 140 puts ("") ;
Chris@0 141
Chris@0 142 return ;
Chris@0 143 } /* error_test */
Chris@0 144
Chris@0 145 static void
Chris@0 146 zero_input_test (int converter)
Chris@0 147 { SRC_DATA data ;
Chris@0 148 SRC_STATE *state ;
Chris@0 149 float out [100] ;
Chris@0 150 int error ;
Chris@0 151
Chris@0 152 printf (" %s (%-26s) ........ ", __func__, src_get_name (converter)) ;
Chris@0 153 fflush (stdout) ;
Chris@0 154
Chris@0 155 if ((state = src_new (converter, 1, &error)) == NULL)
Chris@0 156 { printf ("\n\nLine %d : src_new failed : %s.\n\n", __LINE__, src_strerror (error)) ;
Chris@0 157 exit (1) ;
Chris@0 158 } ;
Chris@0 159
Chris@0 160 data.data_in = (float *) 0xdeadbeef ;
Chris@0 161 data.input_frames = 0 ;
Chris@0 162 data.data_out = out ;
Chris@0 163 data.output_frames = ARRAY_LEN (out) ;
Chris@0 164 data.end_of_input = 0 ;
Chris@0 165 data.src_ratio = 1.0 ;
Chris@0 166
Chris@0 167 if ((error = src_process (state, &data)))
Chris@0 168 { printf ("\n\nLine %d : src_new failed : %s.\n\n", __LINE__, src_strerror (error)) ;
Chris@0 169 exit (1) ;
Chris@0 170 } ;
Chris@0 171
Chris@0 172 state = src_delete (state) ;
Chris@0 173
Chris@0 174 puts ("ok") ;
Chris@0 175 } /* zero_input_test */