annotate src/libsamplerate-0.1.8/tests/misc_test.c @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents c7265573341e
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 */