cannam@85
|
1 /*
|
cannam@85
|
2 ** Copyright (C) 2003-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
|
cannam@85
|
3 **
|
cannam@85
|
4 ** This program is free software; you can redistribute it and/or modify
|
cannam@85
|
5 ** it under the terms of the GNU General Public License as published by
|
cannam@85
|
6 ** the Free Software Foundation; either version 2 of the License, or
|
cannam@85
|
7 ** (at your option) any later version.
|
cannam@85
|
8 **
|
cannam@85
|
9 ** This program is distributed in the hope that it will be useful,
|
cannam@85
|
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
cannam@85
|
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
cannam@85
|
12 ** GNU General Public License for more details.
|
cannam@85
|
13 **
|
cannam@85
|
14 ** You should have received a copy of the GNU General Public License
|
cannam@85
|
15 ** along with this program; if not, write to the Free Software
|
cannam@85
|
16 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
cannam@85
|
17 */
|
cannam@85
|
18
|
cannam@85
|
19 #include <stdio.h>
|
cannam@85
|
20 #include <stdlib.h>
|
cannam@85
|
21 #include <string.h>
|
cannam@85
|
22
|
cannam@85
|
23 #include <samplerate.h>
|
cannam@85
|
24
|
cannam@85
|
25 #include "util.h"
|
cannam@85
|
26
|
cannam@85
|
27 #define BUFFER_LEN 10000
|
cannam@85
|
28
|
cannam@85
|
29 static void float_to_short_test (void) ;
|
cannam@85
|
30 static void short_to_float_test (void) ;
|
cannam@85
|
31
|
cannam@85
|
32 static void float_to_int_test (void) ;
|
cannam@85
|
33 static void int_to_float_test (void) ;
|
cannam@85
|
34
|
cannam@85
|
35 int
|
cannam@85
|
36 main (void)
|
cannam@85
|
37 {
|
cannam@85
|
38 puts ("") ;
|
cannam@85
|
39
|
cannam@85
|
40 float_to_short_test () ;
|
cannam@85
|
41 short_to_float_test () ;
|
cannam@85
|
42
|
cannam@85
|
43 float_to_int_test () ;
|
cannam@85
|
44 int_to_float_test () ;
|
cannam@85
|
45
|
cannam@85
|
46 puts ("") ;
|
cannam@85
|
47
|
cannam@85
|
48 return 0 ;
|
cannam@85
|
49 } /* main */
|
cannam@85
|
50
|
cannam@85
|
51 /*=====================================================================================
|
cannam@85
|
52 */
|
cannam@85
|
53
|
cannam@85
|
54 static void
|
cannam@85
|
55 float_to_short_test (void)
|
cannam@85
|
56 {
|
cannam@85
|
57 static float fpos [] =
|
cannam@85
|
58 { 0.95, 0.99, 1.0, 1.01, 1.1, 2.0, 11.1, 111.1, 2222.2, 33333.3
|
cannam@85
|
59 } ;
|
cannam@85
|
60 static float fneg [] =
|
cannam@85
|
61 { -0.95, -0.99, -1.0, -1.01, -1.1, -2.0, -11.1, -111.1, -2222.2, -33333.3
|
cannam@85
|
62 } ;
|
cannam@85
|
63
|
cannam@85
|
64 static short out [MAX (ARRAY_LEN (fpos), ARRAY_LEN (fneg))] ;
|
cannam@85
|
65
|
cannam@85
|
66 int k ;
|
cannam@85
|
67
|
cannam@85
|
68 printf ("\tfloat_to_short_test ............................. ") ;
|
cannam@85
|
69
|
cannam@85
|
70 src_float_to_short_array (fpos, out, ARRAY_LEN (fpos)) ;
|
cannam@85
|
71
|
cannam@85
|
72 for (k = 0 ; k < ARRAY_LEN (fpos) ; k++)
|
cannam@85
|
73 if (out [k] < 30000)
|
cannam@85
|
74 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
|
cannam@85
|
75 exit (1) ;
|
cannam@85
|
76 } ;
|
cannam@85
|
77
|
cannam@85
|
78 src_float_to_short_array (fneg, out, ARRAY_LEN (fneg)) ;
|
cannam@85
|
79
|
cannam@85
|
80 for (k = 0 ; k < ARRAY_LEN (fneg) ; k++)
|
cannam@85
|
81 if (out [k] > -30000)
|
cannam@85
|
82 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
|
cannam@85
|
83 exit (1) ;
|
cannam@85
|
84 } ;
|
cannam@85
|
85
|
cannam@85
|
86 puts ("ok") ;
|
cannam@85
|
87
|
cannam@85
|
88 return ;
|
cannam@85
|
89 } /* float_to_short_test */
|
cannam@85
|
90
|
cannam@85
|
91 /*-------------------------------------------------------------------------------------
|
cannam@85
|
92 */
|
cannam@85
|
93
|
cannam@85
|
94 static void
|
cannam@85
|
95 short_to_float_test (void)
|
cannam@85
|
96 {
|
cannam@85
|
97 static short input [BUFFER_LEN] ;
|
cannam@85
|
98 static short output [BUFFER_LEN] ;
|
cannam@85
|
99 static float temp [BUFFER_LEN] ;
|
cannam@85
|
100
|
cannam@85
|
101 int k ;
|
cannam@85
|
102
|
cannam@85
|
103 printf ("\tshort_to_float_test ............................. ") ;
|
cannam@85
|
104
|
cannam@85
|
105 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
|
cannam@85
|
106 input [k] = (k * 0x8000) / ARRAY_LEN (input) ;
|
cannam@85
|
107
|
cannam@85
|
108 src_short_to_float_array (input, temp, ARRAY_LEN (temp)) ;
|
cannam@85
|
109 src_float_to_short_array (temp, output, ARRAY_LEN (output)) ;
|
cannam@85
|
110
|
cannam@85
|
111 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
|
cannam@85
|
112 if (ABS (input [k] - output [k]) > 0)
|
cannam@85
|
113 { printf ("\n\n\tLine %d : index %d %d -> %d\n", __LINE__, k, input [k], output [k]) ;
|
cannam@85
|
114 exit (1) ;
|
cannam@85
|
115 } ;
|
cannam@85
|
116
|
cannam@85
|
117 puts ("ok") ;
|
cannam@85
|
118
|
cannam@85
|
119 return ;
|
cannam@85
|
120 } /* short_to_float_test */
|
cannam@85
|
121
|
cannam@85
|
122 /*=====================================================================================
|
cannam@85
|
123 */
|
cannam@85
|
124
|
cannam@85
|
125 static void
|
cannam@85
|
126 float_to_int_test (void)
|
cannam@85
|
127 {
|
cannam@85
|
128 static float fpos [] =
|
cannam@85
|
129 { 0.95, 0.99, 1.0, 1.01, 1.1, 2.0, 11.1, 111.1, 2222.2, 33333.3
|
cannam@85
|
130 } ;
|
cannam@85
|
131 static float fneg [] =
|
cannam@85
|
132 { -0.95, -0.99, -1.0, -1.01, -1.1, -2.0, -11.1, -111.1, -2222.2, -33333.3
|
cannam@85
|
133 } ;
|
cannam@85
|
134
|
cannam@85
|
135 static int out [MAX (ARRAY_LEN (fpos), ARRAY_LEN (fneg))] ;
|
cannam@85
|
136
|
cannam@85
|
137 int k ;
|
cannam@85
|
138
|
cannam@85
|
139 printf ("\tfloat_to_int_test ............................... ") ;
|
cannam@85
|
140
|
cannam@85
|
141 src_float_to_int_array (fpos, out, ARRAY_LEN (fpos)) ;
|
cannam@85
|
142
|
cannam@85
|
143 for (k = 0 ; k < ARRAY_LEN (fpos) ; k++)
|
cannam@85
|
144 if (out [k] < 30000 * 0x10000)
|
cannam@85
|
145 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
|
cannam@85
|
146 exit (1) ;
|
cannam@85
|
147 } ;
|
cannam@85
|
148
|
cannam@85
|
149 src_float_to_int_array (fneg, out, ARRAY_LEN (fneg)) ;
|
cannam@85
|
150
|
cannam@85
|
151 for (k = 0 ; k < ARRAY_LEN (fneg) ; k++)
|
cannam@85
|
152 if (out [k] > -30000 * 0x1000)
|
cannam@85
|
153 { printf ("\n\n\tLine %d : out [%d] == %d\n", __LINE__, k, out [k]) ;
|
cannam@85
|
154 exit (1) ;
|
cannam@85
|
155 } ;
|
cannam@85
|
156
|
cannam@85
|
157 puts ("ok") ;
|
cannam@85
|
158
|
cannam@85
|
159 return ;
|
cannam@85
|
160 } /* float_to_int_test */
|
cannam@85
|
161
|
cannam@85
|
162 /*-------------------------------------------------------------------------------------
|
cannam@85
|
163 */
|
cannam@85
|
164
|
cannam@85
|
165 static void
|
cannam@85
|
166 int_to_float_test (void)
|
cannam@85
|
167 {
|
cannam@85
|
168 static int input [BUFFER_LEN] ;
|
cannam@85
|
169 static int output [BUFFER_LEN] ;
|
cannam@85
|
170 static float temp [BUFFER_LEN] ;
|
cannam@85
|
171
|
cannam@85
|
172 int k ;
|
cannam@85
|
173
|
cannam@85
|
174 printf ("\tint_to_float_test ............................... ") ;
|
cannam@85
|
175
|
cannam@85
|
176 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
|
cannam@85
|
177 input [k] = (k * 0x80000000) / ARRAY_LEN (input) ;
|
cannam@85
|
178
|
cannam@85
|
179 src_int_to_float_array (input, temp, ARRAY_LEN (temp)) ;
|
cannam@85
|
180 src_float_to_int_array (temp, output, ARRAY_LEN (output)) ;
|
cannam@85
|
181
|
cannam@85
|
182 for (k = 0 ; k < ARRAY_LEN (input) ; k++)
|
cannam@85
|
183 if (ABS (input [k] - output [k]) > 0)
|
cannam@85
|
184 { printf ("\n\n\tLine %d : index %d %d -> %d\n", __LINE__, k, input [k], output [k]) ;
|
cannam@85
|
185 exit (1) ;
|
cannam@85
|
186 } ;
|
cannam@85
|
187
|
cannam@85
|
188 puts ("ok") ;
|
cannam@85
|
189
|
cannam@85
|
190 return ;
|
cannam@85
|
191 } /* int_to_float_test */
|
cannam@85
|
192
|