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
|