annotate src/libsamplerate-0.1.9/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 481f5f8c5634
children
rev   line source
Chris@41 1 /*
Chris@41 2 ** Copyright (c) 2002-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
Chris@41 3 ** All rights reserved.
Chris@41 4 **
Chris@41 5 ** This code is released under 2-clause BSD license. Please see the
Chris@41 6 ** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING
Chris@41 7 */
Chris@41 8
Chris@41 9 #include <stdio.h>
Chris@41 10 #include <stdlib.h>
Chris@41 11 #include <string.h>
Chris@41 12
Chris@41 13 #include <samplerate.h>
Chris@41 14
Chris@41 15 #include "util.h"
Chris@41 16
Chris@41 17 static void name_test (void) ;
Chris@41 18 static void error_test (void) ;
Chris@41 19 static void src_ratio_test (void) ;
Chris@41 20 static void zero_input_test (int converter) ;
Chris@41 21
Chris@41 22 int
Chris@41 23 main (void)
Chris@41 24 {
Chris@41 25 puts ("") ;
Chris@41 26
Chris@41 27 printf (" version : %s\n\n", src_get_version ()) ;
Chris@41 28
Chris@41 29 /* Current max converter is SRC_LINEAR. */
Chris@41 30 name_test () ;
Chris@41 31
Chris@41 32 error_test () ;
Chris@41 33
Chris@41 34 src_ratio_test () ;
Chris@41 35
Chris@41 36 zero_input_test (SRC_ZERO_ORDER_HOLD) ;
Chris@41 37 zero_input_test (SRC_LINEAR) ;
Chris@41 38 zero_input_test (SRC_SINC_FASTEST) ;
Chris@41 39
Chris@41 40 puts ("") ;
Chris@41 41 return 0 ;
Chris@41 42 } /* main */
Chris@41 43
Chris@41 44 static void
Chris@41 45 name_test (void)
Chris@41 46 { const char *name ;
Chris@41 47 int k = 0 ;
Chris@41 48
Chris@41 49 puts (" name_test :") ;
Chris@41 50
Chris@41 51 while (1)
Chris@41 52 { name = src_get_name (k) ;
Chris@41 53 if (name == NULL)
Chris@41 54 break ;
Chris@41 55 printf ("\tName %d : %s\n", k, name) ;
Chris@41 56 printf ("\tDesc %d : %s\n", k, src_get_description (k)) ;
Chris@41 57 k ++ ;
Chris@41 58 } ;
Chris@41 59
Chris@41 60 puts ("") ;
Chris@41 61
Chris@41 62 return ;
Chris@41 63 } /* name_test */
Chris@41 64
Chris@41 65 /*------------------------------------------------------------------------------
Chris@41 66 */
Chris@41 67
Chris@41 68 typedef struct
Chris@41 69 { double ratio ;
Chris@41 70 int should_pass ;
Chris@41 71 } RATIO_TEST ;
Chris@41 72
Chris@41 73 static RATIO_TEST ratio_test [] =
Chris@41 74 { { 1.0 / 256.1, 0 },
Chris@41 75 { 1.0 / 256.0, 1 },
Chris@41 76 { 1.0, 1 },
Chris@41 77 { 256.0, 1 },
Chris@41 78 { 256.1, 0 },
Chris@41 79 { -1.0, 0 }
Chris@41 80 } ;
Chris@41 81
Chris@41 82 static void
Chris@41 83 src_ratio_test (void)
Chris@41 84 { int k ;
Chris@41 85
Chris@41 86 puts (" src_ratio_test (SRC ratio must be in range [1/256, 256]):" ) ;
Chris@41 87
Chris@41 88
Chris@41 89 for (k = 0 ; k < ARRAY_LEN (ratio_test) ; k++)
Chris@41 90 { if (ratio_test [k].should_pass && src_is_valid_ratio (ratio_test [k].ratio) == 0)
Chris@41 91 { printf ("\n\nLine %d : SRC ratio %f should have passed.\n\n", __LINE__, ratio_test [k].ratio) ;
Chris@41 92 exit (1) ;
Chris@41 93 } ;
Chris@41 94 if (! ratio_test [k].should_pass && src_is_valid_ratio (ratio_test [k].ratio) != 0)
Chris@41 95 { printf ("\n\nLine %d : SRC ratio %f should not have passed.\n\n", __LINE__, ratio_test [k].ratio) ;
Chris@41 96 exit (1) ;
Chris@41 97 } ;
Chris@41 98 printf ("\t SRC ratio (%9.5f) : %s ................... ok\n", ratio_test [k].ratio,
Chris@41 99 (ratio_test [k].should_pass ? "pass" : "fail")) ;
Chris@41 100 } ;
Chris@41 101
Chris@41 102 puts ("") ;
Chris@41 103
Chris@41 104 return ;
Chris@41 105 } /* src_ratio_test */
Chris@41 106
Chris@41 107 static void
Chris@41 108 error_test (void)
Chris@41 109 { const char *errorstr ;
Chris@41 110 int k, errors = 0 ;
Chris@41 111
Chris@41 112 puts (" error_test :") ;
Chris@41 113
Chris@41 114 for (k = 0 ; 1 ; k++)
Chris@41 115 { errorstr = src_strerror (k) ;
Chris@41 116 printf ("\t%-2d : %s\n", k, errorstr) ;
Chris@41 117 if (errorstr == NULL)
Chris@41 118 { errors ++ ;
Chris@41 119 continue ;
Chris@41 120 } ;
Chris@41 121 if (strstr (errorstr, "Placeholder.") == errorstr)
Chris@41 122 break ;
Chris@41 123 } ;
Chris@41 124
Chris@41 125 if (errors != 0)
Chris@41 126 { printf ("\n\nLine %d : Missing error numbers above.\n\n", __LINE__) ;
Chris@41 127 exit (1) ;
Chris@41 128 } ;
Chris@41 129
Chris@41 130 puts ("") ;
Chris@41 131
Chris@41 132 return ;
Chris@41 133 } /* error_test */
Chris@41 134
Chris@41 135 static void
Chris@41 136 zero_input_test (int converter)
Chris@41 137 { SRC_DATA data ;
Chris@41 138 SRC_STATE *state ;
Chris@41 139 float out [100] ;
Chris@41 140 int error ;
Chris@41 141
Chris@41 142 printf (" %s (%-26s) ........ ", __func__, src_get_name (converter)) ;
Chris@41 143 fflush (stdout) ;
Chris@41 144
Chris@41 145 if ((state = src_new (converter, 1, &error)) == NULL)
Chris@41 146 { printf ("\n\nLine %d : src_new failed : %s.\n\n", __LINE__, src_strerror (error)) ;
Chris@41 147 exit (1) ;
Chris@41 148 } ;
Chris@41 149
Chris@41 150 data.data_in = (float *) 0xdeadbeef ;
Chris@41 151 data.input_frames = 0 ;
Chris@41 152 data.data_out = out ;
Chris@41 153 data.output_frames = ARRAY_LEN (out) ;
Chris@41 154 data.end_of_input = 0 ;
Chris@41 155 data.src_ratio = 1.0 ;
Chris@41 156
Chris@41 157 if ((error = src_process (state, &data)))
Chris@41 158 { printf ("\n\nLine %d : src_new failed : %s.\n\n", __LINE__, src_strerror (error)) ;
Chris@41 159 exit (1) ;
Chris@41 160 } ;
Chris@41 161
Chris@41 162 state = src_delete (state) ;
Chris@41 163
Chris@41 164 puts ("ok") ;
Chris@41 165 } /* zero_input_test */