~ubuntu-branches/debian/jessie/libsndfile/jessie

« back to all changes in this revision

Viewing changes to src/test_ima_oki_adpcm.c

  • Committer: Bazaar Package Importer
  • Author(s): Samuel Mimram
  • Date: 2009-02-17 19:21:03 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090217192103-7rhu1n8p79jnbzy3
Tags: 1.0.18-2
Add missing build-dependencies on pkg-config and libvorbis-dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
** Copyright (c) 2007 <robs@users.sourceforge.net>
 
3
** Copyright (C) 2007-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
 
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 <stdio.h>
 
21
 
 
22
#include "test_main.h"
 
23
 
 
24
#include "ima_oki_adpcm.c"
 
25
 
 
26
static const unsigned char test_codes [] =
 
27
{       0x08, 0x08, 0x04, 0x7f, 0x72, 0xf7, 0x9f, 0x7c, 0xd7, 0xbc, 0x7a, 0xa7, 0xb8,
 
28
        0x4b, 0x0b, 0x38, 0xf6, 0x9d, 0x7a, 0xd7, 0xbc, 0x7a, 0xd7, 0xa8, 0x6c, 0x81,
 
29
        0x98, 0xe4, 0x0e, 0x7a, 0xd7, 0x9e, 0x7b, 0xc7, 0xab, 0x7a, 0x85, 0xc0, 0xb3,
 
30
        0x8f, 0x58, 0xd7, 0xad, 0x7a, 0xd7, 0xad, 0x7a, 0x87, 0xd0, 0x2b, 0x0e, 0x48,
 
31
        0xd7, 0xad, 0x78, 0xf7, 0xbc, 0x7a, 0xb7, 0xa8, 0x4b, 0x88, 0x18, 0xd5, 0x8d,
 
32
        0x6a, 0xa4, 0x98, 0x08, 0x00, 0x80, 0x88,
 
33
} ;
 
34
 
 
35
static const short test_pcm [] =
 
36
{       32, 0, 32, 0, 32, 320, 880, -336, 2304, 4192, -992, 10128, 5360, -16352,
 
37
        30208, 2272, -31872, 14688, -7040, -32432, 14128, -1392, -15488, 22960,
 
38
        1232, -1584, 21488, -240, 2576, -15360, 960, -1152, -30032, 10320, 1008,
 
39
        -30032, 16528, 1008, -30032, 16528, -5200, -30592, 15968, 448, -30592,
 
40
        15968, 448, -2368, 30960, 3024, -80, 8384, 704, -1616, -29168, -1232, 1872,
 
41
        -32768, 13792, -1728, -32768, 13792, 4480, -32192, 14368, -7360, -32752,
 
42
        13808, -1712, -21456, 16992, 1472, -1344, 26848, -1088, 2016, -17728, 208,
 
43
        -2112, -32768, 1376, -1728, -32768, 13792, -1728, -32768, 13792, -1728,
 
44
        -32768, 13792, -1728, -32768, 13792, -1728, -4544, 32767, -1377, 1727,
 
45
        15823, -2113, 207, -27345, 591, -2513, -32768, 13792, -1728, -32768, 13792,
 
46
        10688, -31632, 14928, -6800, -32192, 14368, -1152, -20896, 17552, 2032,
 
47
        -784, 22288, 560, -2256, -4816, 2176, 64, -21120, 9920, 6816, -24224, 16128,
 
48
        608, -13488, 9584, 272, -2544, 16, -2304, -192, 1728, -16, 1568, 128, -1184,
 
49
} ;
 
50
 
 
51
 
 
52
static void
 
53
test_oki_adpcm (void)
 
54
{
 
55
        IMA_OKI_ADPCM adpcm ;
 
56
        unsigned char code ;
 
57
        int i, j ;
 
58
 
 
59
        print_test_name ("Testing ima/oki encoder") ;
 
60
 
 
61
        ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
 
62
        for (i = 0 ; i < ARRAY_LEN (test_codes) ; i++)
 
63
                for (j = 0, code = test_codes [i] ; j < 2 ; j++, code <<= 4)
 
64
                        if (adpcm_decode (&adpcm, code >> 4) != test_pcm [2 * i + j])
 
65
                        {       printf ("\n\nFail at i = %d, j = %d.\n\n", i, j) ;
 
66
                                exit (1) ;
 
67
                                } ;
 
68
 
 
69
        puts ("ok") ;
 
70
 
 
71
        print_test_name ("Testing ima/oki decoder") ;
 
72
 
 
73
        ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
 
74
        for (i = 0 ; i < ARRAY_LEN (test_pcm) ; i += j)
 
75
        {       code = adpcm_encode (&adpcm, test_pcm [i]) ;
 
76
                code = (code << 4) | adpcm_encode (&adpcm, test_pcm [i + 1]) ;
 
77
                if (code != test_codes [i / 2])
 
78
                        {       printf ("\n\nFail at i = %d, %d should be %d\n\n", i, code, test_codes [i / 2]) ;
 
79
                                exit (1) ;
 
80
                                } ;
 
81
                } ;
 
82
 
 
83
        puts ("ok") ;
 
84
} /* test_oki_adpcm */
 
85
 
 
86
static void
 
87
test_oki_adpcm_block (void)
 
88
{
 
89
        IMA_OKI_ADPCM adpcm ;
 
90
        int k ;
 
91
 
 
92
        if (ARRAY_LEN (adpcm.pcm) < ARRAY_LEN (test_pcm))
 
93
        {       printf ("\n\nLine %d : ARRAY_LEN (adpcm->pcm) > ARRAY_LEN (test_pcm) (%d > %d).\n\n", __LINE__, ARRAY_LEN (adpcm.pcm), ARRAY_LEN (test_pcm)) ;
 
94
                exit (1) ;
 
95
                } ;
 
96
 
 
97
        if (ARRAY_LEN (adpcm.codes) < ARRAY_LEN (test_codes))
 
98
        {       printf ("\n\nLine %d : ARRAY_LEN (adcodes->codes) > ARRAY_LEN (test_codes).n", __LINE__) ;
 
99
                exit (1) ;
 
100
                } ;
 
101
 
 
102
        print_test_name ("Testing ima/oki block encoder") ;
 
103
 
 
104
        ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
 
105
 
 
106
        memcpy (adpcm.pcm, test_pcm, sizeof (adpcm.pcm [0]) * ARRAY_LEN (test_pcm)) ;
 
107
        adpcm.pcm_count = ARRAY_LEN (test_pcm) ;
 
108
        adpcm.code_count = 13 ;
 
109
 
 
110
        ima_oki_adpcm_encode_block (&adpcm) ;
 
111
 
 
112
        if (adpcm.code_count * 2 != ARRAY_LEN (test_pcm))
 
113
        {       printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.code_count * 2, ARRAY_LEN (test_pcm)) ;
 
114
                exit (1) ;
 
115
                } ;
 
116
 
 
117
        for (k = 0 ; k < ARRAY_LEN (test_codes) ; k++)
 
118
                if (adpcm.codes [k] != test_codes [k])
 
119
                {       printf ("\n\nLine %d : Fail at k = %d, %d should be %d\n\n", __LINE__, k, adpcm.codes [k], test_codes [k]) ;
 
120
                        exit (1) ;
 
121
                        } ;
 
122
 
 
123
        puts ("ok") ;
 
124
 
 
125
        print_test_name ("Testing ima/oki block decoder") ;
 
126
 
 
127
        ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
 
128
 
 
129
        memcpy (adpcm.codes, test_codes, sizeof (adpcm.codes [0]) * ARRAY_LEN (test_codes)) ;
 
130
        adpcm.code_count = ARRAY_LEN (test_codes) ;
 
131
        adpcm.pcm_count = 13 ;
 
132
 
 
133
        ima_oki_adpcm_decode_block (&adpcm) ;
 
134
 
 
135
        if (adpcm.pcm_count != 2 * ARRAY_LEN (test_codes))
 
136
        {       printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.pcm_count, 2 * ARRAY_LEN (test_codes)) ;
 
137
                exit (1) ;
 
138
                } ;
 
139
 
 
140
        for (k = 0 ; k < ARRAY_LEN (test_pcm) ; k++)
 
141
                if (adpcm.pcm [k] != test_pcm [k])
 
142
                {       printf ("\n\nLine %d : Fail at i = %d, %d should be %d.\n\n", __LINE__, k, adpcm.pcm [k], test_pcm [k]) ;
 
143
                        exit (1) ;
 
144
                        } ;
 
145
 
 
146
        puts ("ok") ;
 
147
} /* test_oki_adpcm_block */
 
148
 
 
149
void
 
150
test_ima_oki_adpcm (void)
 
151
{
 
152
        test_oki_adpcm () ;
 
153
        test_oki_adpcm_block () ;
 
154
} /* main */
 
155