annotate src/libsamplerate-0.1.8/tests/float_short_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) 2003-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 #define BUFFER_LEN 10000
Chris@0 28
Chris@0 29 static void float_to_short_test (void) ;
Chris@0 30 static void short_to_float_test (void) ;
Chris@0 31
Chris@0 32 static void float_to_int_test (void) ;
Chris@0 33 static void int_to_float_test (void) ;
Chris@0 34
Chris@0 35 int
Chris@0 36 main (void)
Chris@0 37 {
Chris@0 38 puts ("") ;
Chris@0 39
Chris@0 40 float_to_short_test () ;
Chris@0 41 short_to_float_test () ;
Chris@0 42
Chris@0 43 float_to_int_test () ;
Chris@0 44 int_to_float_test () ;
Chris@0 45
Chris@0 46 puts ("") ;
Chris@0 47
Chris@0 48 return 0 ;
Chris@0 49 } /* main */
Chris@0 50
Chris@0 51 /*=====================================================================================
Chris@0 52 */
Chris@0 53
Chris@0 54 static void
Chris@0 55 float_to_short_test (void)
Chris@0 56 {
Chris@0 57 static float fpos [] =
Chris@0 58 { 0.95, 0.99, 1.0, 1.01, 1.1, 2.0, 11.1, 111.1, 2222.2, 33333.3
Chris@0 59 } ;
Chris@0 60 static float fneg [] =
Chris@0 61 { -0.95, -0.99, -1.0, -1.01, -1.1, -2.0, -11.1, -111.1, -2222.2, -33333.3
Chris@0 62 } ;
Chris@0 63
Chris@0 64 static short out [MAX (ARRAY_LEN (fpos), ARRAY_LEN (fneg))] ;
Chris@0 65
Chris@0 66 int k ;
Chris@0 67
Chris@0 68 printf ("\tfloat_to_short_test ............................. ") ;
Chris@0 69
Chris@0 70 src_float_to_short_array (fpos, out, ARRAY_LEN (fpos)) ;
Chris@0 71
Chris@0 72 for (k = 0 ; k < ARRAY_LEN (fpos) ; k++)
Chris@0 73 if (out [k] < 30000)
Chris@0 74 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
Chris@0 75 exit (1) ;
Chris@0 76 } ;
Chris@0 77
Chris@0 78 src_float_to_short_array (fneg, out, ARRAY_LEN (fneg)) ;
Chris@0 79
Chris@0 80 for (k = 0 ; k < ARRAY_LEN (fneg) ; k++)
Chris@0 81 if (out [k] > -30000)
Chris@0 82 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
Chris@0 83 exit (1) ;
Chris@0 84 } ;
Chris@0 85
Chris@0 86 puts ("ok") ;
Chris@0 87
Chris@0 88 return ;
Chris@0 89 } /* float_to_short_test */
Chris@0 90
Chris@0 91 /*-------------------------------------------------------------------------------------
Chris@0 92 */
Chris@0 93
Chris@0 94 static void
Chris@0 95 short_to_float_test (void)
Chris@0 96 {
Chris@0 97 static short input [BUFFER_LEN] ;
Chris@0 98 static short output [BUFFER_LEN] ;
Chris@0 99 static float temp [BUFFER_LEN] ;
Chris@0 100
Chris@0 101 int k ;
Chris@0 102
Chris@0 103 printf ("\tshort_to_float_test ............................. ") ;
Chris@0 104
Chris@0 105 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
Chris@0 106 input [k] = (k * 0x8000) / ARRAY_LEN (input) ;
Chris@0 107
Chris@0 108 src_short_to_float_array (input, temp, ARRAY_LEN (temp)) ;
Chris@0 109 src_float_to_short_array (temp, output, ARRAY_LEN (output)) ;
Chris@0 110
Chris@0 111 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
Chris@0 112 if (ABS (input [k] - output [k]) > 0)
Chris@0 113 { printf ("\n\n\tLine %d : index %d %d -> %d\n", __LINE__, k, input [k], output [k]) ;
Chris@0 114 exit (1) ;
Chris@0 115 } ;
Chris@0 116
Chris@0 117 puts ("ok") ;
Chris@0 118
Chris@0 119 return ;
Chris@0 120 } /* short_to_float_test */
Chris@0 121
Chris@0 122 /*=====================================================================================
Chris@0 123 */
Chris@0 124
Chris@0 125 static void
Chris@0 126 float_to_int_test (void)
Chris@0 127 {
Chris@0 128 static float fpos [] =
Chris@0 129 { 0.95, 0.99, 1.0, 1.01, 1.1, 2.0, 11.1, 111.1, 2222.2, 33333.3
Chris@0 130 } ;
Chris@0 131 static float fneg [] =
Chris@0 132 { -0.95, -0.99, -1.0, -1.01, -1.1, -2.0, -11.1, -111.1, -2222.2, -33333.3
Chris@0 133 } ;
Chris@0 134
Chris@0 135 static int out [MAX (ARRAY_LEN (fpos), ARRAY_LEN (fneg))] ;
Chris@0 136
Chris@0 137 int k ;
Chris@0 138
Chris@0 139 printf ("\tfloat_to_int_test ............................... ") ;
Chris@0 140
Chris@0 141 src_float_to_int_array (fpos, out, ARRAY_LEN (fpos)) ;
Chris@0 142
Chris@0 143 for (k = 0 ; k < ARRAY_LEN (fpos) ; k++)
Chris@0 144 if (out [k] < 30000 * 0x10000)
Chris@0 145 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
Chris@0 146 exit (1) ;
Chris@0 147 } ;
Chris@0 148
Chris@0 149 src_float_to_int_array (fneg, out, ARRAY_LEN (fneg)) ;
Chris@0 150
Chris@0 151 for (k = 0 ; k < ARRAY_LEN (fneg) ; k++)
Chris@0 152 if (out [k] > -30000 * 0x1000)
Chris@0 153 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
Chris@0 154 exit (1) ;
Chris@0 155 } ;
Chris@0 156
Chris@0 157 puts ("ok") ;
Chris@0 158
Chris@0 159 return ;
Chris@0 160 } /* float_to_int_test */
Chris@0 161
Chris@0 162 /*-------------------------------------------------------------------------------------
Chris@0 163 */
Chris@0 164
Chris@0 165 static void
Chris@0 166 int_to_float_test (void)
Chris@0 167 {
Chris@0 168 static int input [BUFFER_LEN] ;
Chris@0 169 static int output [BUFFER_LEN] ;
Chris@0 170 static float temp [BUFFER_LEN] ;
Chris@0 171
Chris@0 172 int k ;
Chris@0 173
Chris@0 174 printf ("\tint_to_float_test ............................... ") ;
Chris@0 175
Chris@0 176 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
Chris@0 177 input [k] = (k * 0x80000000) / ARRAY_LEN (input) ;
Chris@0 178
Chris@0 179 src_int_to_float_array (input, temp, ARRAY_LEN (temp)) ;
Chris@0 180 src_float_to_int_array (temp, output, ARRAY_LEN (output)) ;
Chris@0 181
Chris@0 182 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
Chris@0 183 if (ABS (input [k] - output [k]) > 0)
Chris@0 184 { printf ("\n\n\tLine %d : index %d %d -> %d\n", __LINE__, k, input [k], output [k]) ;
Chris@0 185 exit (1) ;
Chris@0 186 } ;
Chris@0 187
Chris@0 188 puts ("ok") ;
Chris@0 189
Chris@0 190 return ;
Chris@0 191 } /* int_to_float_test */
Chris@0 192