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