xref: /third_party/libsnd/src/test_nms_adpcm.c (revision b815c7f3)
1/*
2** Copyright (C) 2007-2018 Erik de Castro Lopo <erikd@mega-nerd.com>
3** Copyright (C) 2017-2018 Arthur Taylor <art@ified.ca>
4**
5** This library is free software; you can redistribute it and/or modify it
6** under the terms of the GNU Lesser General Public License as published by
7** the Free Software Foundation; either version 2 of the License, or (at
8** your option) any later version.
9**
10** This library is distributed in the hope that it will be useful, but
11** WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
13** General Public License for more details.
14**
15** You should have received a copy of the GNU Lesser General Public License
16** along with this library.  If not, write to the Free Software Foundation,
17** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
18*/
19
20#include "sfconfig.h"
21
22#include <stdio.h>
23
24#include "test_main.h"
25
26#include "nms_adpcm.c"
27
28static const short pcm_data_src [] =
29{	505, 743, 805, 409, 101, -552, -709, -679,
30	-624, -1174, -1050, 32, -401, -769, -679, 47,
31	-3273, -4425, -2158, -176, 824, 1057, 1245, 805,
32	2414, 3282, 1739, -624, -1197, -1663, -913, 603,
33	549, -614, 707, 3314, 2864, 1127, -294, -919,
34	-1251, -147, 30, -750, -131, 1394, 2197, 1829,
35	1387, 417, 391, 533, 581, 179, -210, -210,
36	-884, -937, -1373, -1338, -1811, -2727, -2536, -1552,
37	-651, -3556, -7713, -9083, -6182, 1070, 4983, 5341,
38	4596, 4682, 6488, 5197, 2401, -2702, -5261, -4036,
39	-1995, 463, 1056, 2436, 3238, 4395, 4478, 1130,
40	-2383, -4349, -4547, -3631, -1396, 1029, 2589, 3948,
41	4966, 4312, 2362, 492, -1289, -2259, -1659, -597,
42	239, 1433, 2353, 2512, 1763, 610, -291, -640,
43	7, 132, 432, 438, -1070, -1202, -1071, -1841,
44	-462, 225, -4465, -11313, -10492, -4522, -2096, -7013,
45	-11770, -2546, 7687, 12765, 12014, 5324, 1645, 1191,
46	3800, -187, -6689, -7778, -4631, 2487, 7352, 7928,
47	4317, 2424, 3784, 2301, -1713, -6668, -8345, -6453,
48	-2303, 2269, 3232, 4114, 5054, 5054, 3768, 1060,
49	-1793, -3302, -2059, -86, 1153, 1690, 2869, 3841,
50	3551, 1919, -197, -1391, -847, 128, 746, 1111,
51	431, 559, 1086, 138, -1539, -2758, -1886, 1351,
52	2407, -1883, -8356, -10999, -9917, -7329, -4295, -3209,
53	-11616, -15352, 1032, 12603, 13233, 9059, 4019, 1858,
54	3368, 7454, -56, -8600, -7278, -818, 5478, 7039,
55	5630, 1186, 1634, 5422, 2518, -3182, -8271, -7889,
56	-4399, -129, 3205, 2933, 3661, 5886, 6543, 3798,
57	374, -2722, -3378, -1804, -24, 385, 1663, 3595,
58	4749, 3865, 1402, -851, -1932, -1394, -725, -219,
59	290, 658, 1074, 1638, 536, 204, -340, 408,
60	1835, 1261, -2872, -4840, -5978, -8177, -7644, -6554,
61	-8093, -6174, -7796, -17019, -12355, 1280, 12576, 11868,
62	10710, 8578, 5605, 9675, 7123, -977, -8770, -6740,
63	-1327, 2905, 6386, 5026, 3809, 5137, 6392, 2463,
64	-4924, -8830, -9572, -6122, -1608, 1677, 3379, 5660,
65	8236, 7225, 4470, 295, -2628, -3572, -2107, -666,
66	951, 3101, 5049, 4759, 2367, -140, -2078, -2471,
67	-2332, -1547, -798, 410, 1825, 3329, 3092, 352,
68	-3310, -3307, -1229, -415, 532, 2091, 465, -1430
69} ;
70
71/* pcm_data encoded as 16kbs from a known reference */
72static const unsigned short test_codes_16 [] =
73{	0x5777, 0xfff0, 0xdcd0, 0x672d, 0x1826, 0xc11c, 0x0822, 0xffee,
74	0x3ddc, 0x6372, 0x0116, 0xc8d8, 0x6780, 0x8624, 0x3323, 0x33ef,
75	0xd865, 0x4cd8, 0x3372, 0x1096, 0x0049, 0xa911, 0x1288, 0xa74d,
76	0x3fee, 0xcc45, 0x52de, 0x6a72, 0x9118, 0xe291, 0x60a2, 0x3164,
77	0x73fe, 0xeddf, 0x57b5, 0x185a, 0xe889, 0x460e, 0x2646, 0x8d87,
78	0xe5ba, 0x004c
79} ;
80
81/* pcm_data encoded as 24kbs from a known reference */
82static const unsigned short test_codes_24 [] =
83{	0x7776, 0x2fec, 0xceb0, 0xffd0, 0x3241, 0x650a, 0x0a26, 0x61ba,
84	0xa10b, 0x3912, 0x39a8, 0xebfa, 0x1fff, 0x8552, 0x2342, 0x0204,
85	0x454b, 0xccbb, 0x4318, 0xaa00, 0x1642, 0x3031, 0xfc8f, 0x38ff,
86	0xf604, 0x4924, 0x2ddb, 0x0469, 0xbcaa, 0x83b6, 0x0049, 0x8828,
87	0x2266, 0x3801, 0x873d, 0xcb86, 0x0eff, 0xef64, 0xd402, 0x44fa,
88	0x2867, 0xd1d0, 0xa109, 0x2a11, 0x8a64, 0x4018, 0x1357, 0xd5a5,
89	0x4bfc, 0xcbfe, 0x070a, 0x6307, 0x1858, 0x624b, 0xf9a9, 0x783b,
90	0x0880, 0x1652, 0xc893, 0x641c, 0xf30d, 0x004c
91} ;
92
93/* pcm_data encoded as 32kbs from a known reference */
94static const unsigned short test_codes_32 [] =
95{	0x7772, 0x0cdc, 0xbec2, 0xacb2, 0xff90, 0x1220, 0x551c, 0xcc84,
96	0x2c47, 0x30aa, 0xa10b, 0x0663, 0x2812, 0x28a9, 0xf9ba, 0xceb9,
97	0x1fec, 0x9553, 0x2361, 0x9ed8, 0x8314, 0x564b, 0xddba, 0x1346,
98	0x6308, 0xab00, 0x0721, 0x2908, 0x3820, 0xf89c, 0x38ff, 0xa2bf,
99	0xc535, 0x2933, 0x5de9, 0x8633, 0x8569, 0xbeca, 0x1186, 0x5528,
100	0xd000, 0xaa21, 0x0473, 0x2800, 0x1112, 0xa64d, 0xdc17, 0x8eeb,
101	0xccac, 0xfe74, 0xc501, 0x63f9, 0x2040, 0x3a73, 0xc9b9, 0x9188,
102	0x7318, 0x0a81, 0x9a65, 0x5188, 0x00ba, 0x2256, 0xd5b6, 0x4bfa,
103	0xbeac, 0xe8fe, 0x343b, 0x7117, 0x9ca4, 0x915a, 0x563d, 0xcad0,
104	0xa837, 0x302a, 0x1a2a, 0x3561, 0x98a9, 0xb9b5, 0x578a, 0xc48b,
105	0x25f0, 0x1000
106} ;
107
108
109/* test_codes_16 decoded by a known reference */
110const short pcm_data_out16 [] =
111{	12, 16, 24, 36, 52, -68, -104, -156,
112	-224, -309, -433, 12, -449, -618, -851, 32,
113	-871, -1176, -1586, 60, 1172, 634, 1566, 983,
114	1995, 2586, 1718, -1152, -815, -2313, -1610, 1261,
115	1056, -253, 522, 1799, 2506, 1518, 72, -329,
116	-1510, -76, 337, -1144, 68, 1369, 2200, 1337,
117	1016, 60, 405, 461, 433, 389, -36, -164,
118	-550, -871, -1212, -1626, -2136, -2791, -2064, -1642,
119	-485, -1566, -2538, -3445, -4481, 650, 4381, 3799,
120	5807, 4742, 6674, 5590, 2072, -2228, -5650, -4983,
121	-1698, 441, 1333, 3064, 2855, 3815, 5108, 2156,
122	-2228, -3321, -5028, -4405, -1550, 771, 3232, 3273,
123	4008, 5008, 2024, 859, -654, -2746, -1694, -136,
124	68, 1409, 1759, 2453, 2016, 522, -514, -445,
125	0, 305, 493, 518, -232, -1076, -1116, -1321,
126	-506, 365, -140, -1132, -2076, -2895, -2357, -2477,
127	-3325, -2859, 666, 4449, 7164, 6244, 1847, 1365,
128	3827, -779, -7682, -8951, -3811, 1718, 6566, 7120,
129	4674, 1959, 1819, 2032, -1104, -5220, -8518, -7626,
130	-2385, 2714, 3510, 3871, 4831, 4024, 4156, 1590,
131	-1694, -3437, -2393, 96, 959, 1847, 2775, 3638,
132	3072, 1734, -204, -1730, -718, -92, 453, 807,
133	220, 514, 1349, -40, -1285, -2477, -1566, 1273,
134	2586, 546, -2887, -5534, -6883, -7461, -5281, -2224,
135	-2361, -5104, -48, 9228, 12140, 9048, 3614, 1927,
136	4618, 6004, -148, -9871, -5582, -489, 6835, 6746,
137	6839, 2851, 3028, 4566, 1461, -2028, -6883, -7642,
138	-5321, -610, 3385, 3461, 3088, 3389, 4570, 4321,
139	-389, -2630, -3369, -1706, -136, 220, 1594, 3024,
140	4622, 4232, 1265, -943, -2273, -1638, -726, -232,
141	365, 538, 995, 1530, 289, 453, -68, 12,
142	1184, 1562, 92, -2558, -4859, -6277, -7096, -5461,
143	-4811, -6020, -8851, -12594, -11501, -943, 12927, 10449,
144	8935, 10389, 5662, 5755, 9108, 1827, -10224, -7807,
145	-148, 3429, 7722, 5212, 4734, 3847, 5570, 3433,
146	-3931, -8244, -8461, -5397, -1710, 1919, 3787, 4558,
147	5040, 5722, 4811, -441, -3140, -4180, -2397, -493,
148	1309, 3064, 4116, 5040, 2759, -730, -2445, -2847,
149	-2080, -1682, -1124, 706, 2032, 3325, 3248, 425,
150	-3586, -2987, -1397, -188, 144, 1506, 4, -2028
151} ;
152
153/* test_codes_24 decoded by a known reference */
154static const short pcm_data_out24 [] =
155{	16, 32, 68, 140, 116, -232, -510, -650,
156	-771, -1329, -1052, -152, -317, -907, -710, -104,
157	-1144, -2132, -2598, -301, 662, 827, 1469, 702,
158	2401, 2987, 1574, -244, -1481, -1365, -903, 738,
159	369, -469, 473, 1630, 3124, 1542, -582, -1172,
160	-1381, -317, 4, -610, -40, 1236, 1843, 1493,
161	1349, 417, 389, 630, 686, 188, -228, -168,
162	-742, -795, -1530, -1473, -1903, -3008, -2907, -1317,
163	-445, -2309, -4919, -8939, -5867, 1204, 5293, 5337,
164	4871, 4562, 5602, 5104, 2485, -2337, -5594, -4240,
165	-1694, 867, 1281, 2622, 3638, 4228, 4654, 1405,
166	-1947, -4112, -4184, -3582, -1570, 1325, 2538, 4036,
167	5144, 4630, 2718, 518, -1373, -2397, -1642, -453,
168	349, 1566, 2558, 2493, 1927, 662, -365, -610,
169	-136, 188, 453, 437, -385, -1281, -1196, -1534,
170	-369, 265, -899, -3445, -7176, -4538, -2726, -5650,
171	-13152, -1694, 7040, 11489, 12224, 5971, 1971, 1779,
172	3457, -373, -6040, -7714, -5008, 2594, 7658, 8156,
173	4461, 2333, 4369, 2867, -1919, -7180, -8465, -6409,
174	-2618, 2152, 3120, 4208, 5570, 5558, 4120, 690,
175	-2088, -3345, -1975, -208, 1180, 1738, 2144, 3289,
176	3686, 1819, -417, -1534, -875, 88, 678, 967,
177	437, 558, 951, 20, -1638, -2558, -1967, 558,
178	2289, 465, -4449, -11080, -8931, -6248, -4208, -3337,
179	-6493, -14550, -5068, 12305, 13261, 9742, 4261, 1851,
180	3016, 6971, 441, -9554, -7096, -975, 5188, 6658,
181	5409, 1341, 855, 6164, 1726, -2381, -7991, -7212,
182	-4799, -433, 3236, 3273, 3253, 4445, 6706, 3329,
183	582, -2602, -3028, -1614, -152, 196, 1598, 3638,
184	5144, 4016, 1586, -1004, -2016, -1401, -682, -128,
185	273, 614, 963, 1614, 425, 269, -449, 277,
186	1746, 1240, -1510, -4598, -6397, -8008, -7602, -7152,
187	-7393, -6738, -8606, -15385, -13385, 1192, 12212, 11152,
188	9967, 8622, 5240, 6939, 7369, -2216, -9602, -7425,
189	-999, 3228, 6329, 4702, 4305, 4550, 6216, 3072,
190	-4983, -9313, -9437, -5586, -1987, 2088, 3184, 4662,
191	8244, 6598, 4606, -277, -2718, -3188, -2321, -437,
192	835, 2855, 4638, 4943, 2116, -393, -2269, -2502,
193	-2445, -1630, -646, 469, 1927, 3188, 2943, 502,
194	-3148, -3100, -1144, -642, 658, 1843, 449, -1445
195} ;
196
197/* test_codes_32 decoded by a known reference */
198static const short pcm_data_out32 [] =
199{	20, 96, 417, 433, 140, -506, -742, -714,
200	-598, -1092, -1044, 56, -445, -702, -622, 76,
201	-1116, -4293, -2429, -433, 606, 1196, 1357, 650,
202	2465, 3040, 1730, -682, -1381, -1759, -867, 518,
203	614, -698, 751, 2172, 3216, 1369, -562, -1076,
204	-1293, -116, -12, -803, -176, 1297, 2228, 1759,
205	1257, 425, 453, 614, 622, 188, -212, -220,
206	-975, -951, -1441, -1309, -1698, -2578, -2405, -1650,
207	-590, -2293, -7052, -8506, -5907, 1100, 5192, 5305,
208	4244, 4425, 6779, 5313, 2152, -2654, -5598, -3803,
209	-2176, 301, 1080, 2281, 3361, 4485, 4690, 1269,
210	-2253, -4477, -4562, -3598, -1345, 1108, 2638, 3783,
211	4819, 4401, 2357, 409, -1180, -2204, -1730, -662,
212	168, 1566, 2550, 2333, 1879, 485, -293, -690,
213	-28, 176, 445, 413, -767, -1088, -1204, -1847,
214	-481, 261, -1321, -8714, -10646, -4265, -1979, -7100,
215	-11678, -1911, 7449, 13333, 11991, 5244, 1935, 1072,
216	3638, -4, -6377, -7650, -4819, 2674, 7148, 8036,
217	4325, 2433, 3855, 2204, -1638, -6361, -8192, -6634,
218	-2184, 2144, 3357, 4164, 4783, 5168, 3835, 1100,
219	-1670, -3224, -2140, -144, 1120, 1755, 2530, 3626,
220	3678, 1771, -281, -1289, -875, 48, 755, 1112,
221	449, 546, 1140, 232, -1530, -2783, -1871, 1128,
222	2216, -1899, -8606, -11333, -10140, -7546, -4357, -2979,
223	-6044, -14851, -3726, 13136, 13477, 9534, 3871, 1489,
224	3526, 7012, 80, -8188, -7140, -1120, 5783, 7060,
225	5823, 1337, 1108, 5566, 2345, -3373, -8140, -7919,
226	-4566, 76, 3060, 2795, 3385, 5907, 6558, 3638,
227	257, -2630, -3401, -1807, -116, 349, 1610, 3417,
228	4750, 3967, 1489, -907, -1923, -1385, -666, -265,
229	253, 682, 1084, 1586, 538, 184, -381, 433,
230	1875, 1289, -1574, -4538, -6168, -8196, -7887, -6750,
231	-7526, -6060, -8148, -16036, -12546, 895, 12991, 12060,
232	10827, 8931, 5321, 8646, 7654, -473, -8582, -6614,
233	-1321, 2803, 6542, 5184, 3847, 4943, 6397, 2148,
234	-4999, -8799, -9614, -5931, -1574, 1546, 3493, 5397,
235	7879, 6919, 4610, 160, -2538, -3582, -2052, -578,
236	1060, 2987, 4843, 4791, 2421, -116, -1987, -2518,
237	-2333, -1534, -855, 365, 1779, 3389, 3080, 477,
238	-3281, -3120, -1188, -265, 638, 2224, 333, -1377
239} ;
240
241
242static void
243test_nms_adpcm_32 (void)
244{
245	struct nms_adpcm_state nms ;
246	int16_t *buffer ;
247	unsigned char code ;
248	int i, j, sl ;
249
250	buffer = (int16_t *) malloc (sizeof (int16_t) * NMS_SAMPLES_PER_BLOCK) ;
251
252	print_test_name ("Testing nms adpcm 32kbs encoder") ;
253
254	nms_adpcm_codec_init (&nms, NMS32) ;
255	for (i = 0 ; i * NMS_BLOCK_SHORTS_32 < ARRAY_LEN (test_codes_32) ; i ++)
256	{	/* Unpack the reference */
257		nms_adpcm_block_unpack_32 (&(test_codes_32 [i * NMS_BLOCK_SHORTS_32]), buffer, NULL) ;
258		for (j = 0 ; j < NMS_SAMPLES_PER_BLOCK ; j++)
259		{	sl = pcm_data_src [i * NMS_SAMPLES_PER_BLOCK + j] ;
260			code = nms_adpcm_encode_sample (&nms, sl) ;
261			if (code != buffer [j])
262			{	printf ("\n\nFail at sample %d (block %d, sample %d). Expected 0x%x got 0x%x\n\n",
263					i * NMS_SAMPLES_PER_BLOCK + j, i, j, buffer [j], code) ;
264				exit (1) ;
265				}
266			}
267		}
268
269	puts ("ok") ;
270
271	print_test_name ("Testing nms adpcm 32kbs decoder") ;
272
273	nms_adpcm_codec_init (&nms, NMS32) ;
274	for (i = 0 ; i * NMS_BLOCK_SHORTS_32 < ARRAY_LEN (test_codes_32) ; i ++)
275	{	/* Unpack the code */
276		nms_adpcm_block_unpack_32 (&(test_codes_32 [i * NMS_BLOCK_SHORTS_32]), buffer, NULL) ;
277		for (j = 0 ; j < NMS_SAMPLES_PER_BLOCK ; j++)
278		{	sl = nms_adpcm_decode_sample (&nms, buffer [j]) ;
279			if (sl != pcm_data_out32 [i * NMS_SAMPLES_PER_BLOCK + j])
280			{	printf ("\n\nFail at sample %d (block %d, sample %d). Expected %d got %d\n\n",
281					i * NMS_SAMPLES_PER_BLOCK + j, i, j, pcm_data_out32 [i * NMS_SAMPLES_PER_BLOCK + j], sl) ;
282				exit (1) ;
283				}
284			}
285		}
286
287	puts ("ok") ;
288
289	free (buffer) ;
290}
291
292
293static void
294test_nms_adpcm_24 (void)
295{
296	struct nms_adpcm_state nms ;
297	int16_t *buffer ;
298	unsigned char code ;
299	int i, j, sl ;
300
301	buffer = (int16_t *) malloc (sizeof (int16_t) * NMS_SAMPLES_PER_BLOCK) ;
302
303
304	print_test_name ("Testing nms adpcm 24kbs encoder") ;
305
306	nms_adpcm_codec_init (&nms, NMS24) ;
307	for (i = 0 ; i * NMS_BLOCK_SHORTS_24 < ARRAY_LEN (test_codes_24) ; i ++)
308	{	/* Unpack the reference */
309		nms_adpcm_block_unpack_24 (&test_codes_24 [i * NMS_BLOCK_SHORTS_24], buffer, NULL) ;
310		for (j = 0 ; j < NMS_SAMPLES_PER_BLOCK ; j++)
311		{	sl = pcm_data_src [i * NMS_SAMPLES_PER_BLOCK + j] ;
312			code = nms_adpcm_encode_sample (&nms, sl) ;
313			if (code != buffer [j])
314			{	printf ("\n\nFail at sample %d (block %d, sample %d). Expected 0x%x got 0x%x\n\n",
315					i * NMS_SAMPLES_PER_BLOCK + j, i, j, buffer [j], code) ;
316				exit (1) ;
317				}
318			}
319		}
320
321	puts ("ok") ;
322
323
324	print_test_name ("Testing nms adpcm 24kbs decoder") ;
325
326	nms_adpcm_codec_init (&nms, NMS24) ;
327	for (i = 0 ; i * NMS_BLOCK_SHORTS_24 < ARRAY_LEN (test_codes_24) ; i ++)
328	{	/* Unpack the code */
329		nms_adpcm_block_unpack_24 (&test_codes_24 [i * NMS_BLOCK_SHORTS_24], buffer, NULL) ;
330		for (j = 0 ; j < NMS_SAMPLES_PER_BLOCK ; j++)
331		{	sl = nms_adpcm_decode_sample (&nms, buffer [j]) ;
332			if (sl != pcm_data_out24 [i * NMS_SAMPLES_PER_BLOCK + j])
333			{	printf ("\n\nFail at sample %d (block %d, sample %d). Expected %d got %d\n\n",
334					i * NMS_SAMPLES_PER_BLOCK + j, i, j, pcm_data_out24 [i * NMS_SAMPLES_PER_BLOCK + j], sl) ;
335				exit (1) ;
336				}
337			}
338		}
339
340	puts ("ok") ;
341
342	free (buffer) ;
343} /* test_nms_adpcm_24 */
344
345static void
346test_nms_adpcm_16 (void)
347{	struct nms_adpcm_state nms ;
348	int16_t *buffer ;
349	unsigned char code ;
350	int i, j, sl ;
351
352	buffer = (int16_t *) malloc (sizeof (int16_t) * NMS_SAMPLES_PER_BLOCK) ;
353
354	print_test_name ("Testing nms adpcm 16kbs encoder") ;
355
356	nms_adpcm_codec_init (&nms, NMS16) ;
357	for (i = 0 ; i * NMS_BLOCK_SHORTS_16 < ARRAY_LEN (test_codes_16) ; i ++)
358	{	/* Unpack the reference */
359		nms_adpcm_block_unpack_16 (&test_codes_16 [i * NMS_BLOCK_SHORTS_16], buffer, NULL) ;
360		for (j = 0 ; j < NMS_SAMPLES_PER_BLOCK ; j++)
361		{	sl = pcm_data_src [i * NMS_SAMPLES_PER_BLOCK + j] ;
362			code = nms_adpcm_encode_sample (&nms, sl) ;
363			if (code != buffer [j])
364			{	printf ("\n\nFail at sample %d (block %d, sample %d). Expected 0x%x got 0x%x\n\n",
365					i * NMS_SAMPLES_PER_BLOCK + j, i, j, buffer [j], code) ;
366				exit (1) ;
367				}
368			}
369		}
370
371	puts ("ok") ;
372
373	print_test_name ("Testing nms adpcm 16kbs decoder") ;
374
375	nms_adpcm_codec_init (&nms, NMS16) ;
376	for (i = 0 ; i * NMS_BLOCK_SHORTS_16 < ARRAY_LEN (test_codes_16) ; i ++)
377	{	/* Unpack the code */
378		nms_adpcm_block_unpack_16 (&test_codes_16 [i * NMS_BLOCK_SHORTS_16], buffer, NULL) ;
379		for (j = 0 ; j < NMS_SAMPLES_PER_BLOCK ; j++)
380		{	sl = nms_adpcm_decode_sample (&nms, buffer [j]) ;
381			if (sl != pcm_data_out16 [i * NMS_SAMPLES_PER_BLOCK + j])
382			{	printf ("\n\nFail at sample %d (block %d, sample %d). Expected %d got %d\n\n",
383					i * NMS_SAMPLES_PER_BLOCK + j, i, j, pcm_data_out16 [i * NMS_SAMPLES_PER_BLOCK + j], sl) ;
384				exit (1) ;
385				}
386			}
387		}
388
389	puts ("ok") ;
390
391	free (buffer) ;
392} /* test_nms_adpcm_16 */
393
394void
395test_nms_adpcm (void)
396{	test_nms_adpcm_32 () ;
397	test_nms_adpcm_24 () ;
398	test_nms_adpcm_16 () ;
399} /* main */
400
401