forked from sox_ng/sox_ng
Compilation fails on Fedora saying: sox_sample_test.h:190:3: error: implicit declaration of function `fabs' [-Wimplicit-function-declaration] 190 | assert(fabs(d - 1) < 1e-9 && clips == 0); This corresponds to Fedora's unattributed sox-sample_tes-t-c99.patch
204 lines
7.5 KiB
C
204 lines
7.5 KiB
C
/* libSoX test code copyright (c) 2006 robs@users.sourceforge.net
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
* Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#ifdef NDEBUG /* Enable assert always. */
|
|
#undef NDEBUG /* Must undef above assert.h or other that might include it. */
|
|
#endif
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include "sox_ng.h"
|
|
|
|
#define TEST_UINT(bits) \
|
|
uint##bits = 0; \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,uint##bits); \
|
|
assert(sample == SOX_SAMPLE_MIN); \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == 0 && clips == 0); \
|
|
\
|
|
uint##bits = 1; \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,uint##bits); \
|
|
assert(sample > SOX_SAMPLE_MIN && sample < 0); \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == 1 && clips == 0); \
|
|
\
|
|
uint##bits = SOX_INT_MAX(bits); \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,uint##bits); \
|
|
assert((sox_sample_t)(sample * SOX_INT_MAX(bits)) == SOX_UNSIGNED_TO_SAMPLE(bits,1)); \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == SOX_INT_MAX(bits) && clips == 0); \
|
|
\
|
|
sample =SOX_UNSIGNED_TO_SAMPLE(bits,1)+SOX_UNSIGNED_TO_SAMPLE(bits,SOX_INT_MAX(bits))/2; \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == 1 && clips == 0); \
|
|
\
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,1)+SOX_UNSIGNED_TO_SAMPLE(bits,SOX_INT_MAX(bits))/2-1; \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == 0 && clips == 0); \
|
|
\
|
|
uint##bits = (0^SOX_INT_MIN(bits)); \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,uint##bits); \
|
|
assert(sample == 0); \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == (0^SOX_INT_MIN(bits)) && clips == 0); \
|
|
\
|
|
uint##bits = ((0^SOX_INT_MIN(bits))+1); \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,uint##bits); \
|
|
assert(sample > 0 && sample < SOX_SAMPLE_MAX); \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == ((0^SOX_INT_MIN(bits))+1) && clips == 0); \
|
|
\
|
|
uint##bits = SOX_UINT_MAX(bits); \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,uint##bits); \
|
|
assert(sample == SOX_INT_MAX(bits) * SOX_UNSIGNED_TO_SAMPLE(bits,((0^SOX_INT_MIN(bits))+1))); \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == SOX_UINT_MAX(bits) && clips == 0); \
|
|
\
|
|
sample =SOX_UNSIGNED_TO_SAMPLE(bits,SOX_UINT_MAX(bits))+SOX_UNSIGNED_TO_SAMPLE(bits,((0^SOX_INT_MIN(bits))+1))/2-1; \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == SOX_UINT_MAX(bits) && clips == 0); \
|
|
\
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,SOX_UINT_MAX(bits))+SOX_UNSIGNED_TO_SAMPLE(bits,((0^SOX_INT_MIN(bits))+1))/2; \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == SOX_UINT_MAX(bits) && --clips == 0); \
|
|
\
|
|
sample = SOX_SAMPLE_MAX; \
|
|
uint##bits = SOX_SAMPLE_TO_UNSIGNED(bits,sample, clips); \
|
|
assert(uint##bits == SOX_UINT_MAX(bits) && --clips == 0); \
|
|
|
|
#define TEST_SINT(bits) \
|
|
int##bits = SOX_INT_MIN(bits); \
|
|
sample = SOX_SIGNED_TO_SAMPLE(bits,int##bits); \
|
|
assert(sample == SOX_SAMPLE_MIN); \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = SOX_INT_MIN(bits)+1; \
|
|
sample = SOX_SIGNED_TO_SAMPLE(bits,int##bits); \
|
|
assert(sample > SOX_SAMPLE_MIN && sample < 0); \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = SOX_UINT_MAX(bits) /* i.e. -1 */; \
|
|
sample = SOX_SIGNED_TO_SAMPLE(bits,int##bits); \
|
|
assert((sox_sample_t)(sample * SOX_INT_MAX(bits)) == SOX_SIGNED_TO_SAMPLE(bits,SOX_INT_MIN(bits)+1)); \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = SOX_INT_MIN(bits)+1; \
|
|
sample =SOX_UNSIGNED_TO_SAMPLE(bits,1)+SOX_UNSIGNED_TO_SAMPLE(bits,SOX_INT_MAX(bits))/2; \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = SOX_INT_MIN(bits); \
|
|
sample = SOX_UNSIGNED_TO_SAMPLE(bits,1)+SOX_UNSIGNED_TO_SAMPLE(bits,SOX_INT_MAX(bits))/2-1; \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = 0; \
|
|
sample = SOX_SIGNED_TO_SAMPLE(bits,int##bits); \
|
|
assert(sample == 0); \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = 1; \
|
|
sample = SOX_SIGNED_TO_SAMPLE(bits,int##bits); \
|
|
assert(sample > 0 && sample < SOX_SAMPLE_MAX); \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
int##bits = SOX_INT_MAX(bits); \
|
|
sample = SOX_SIGNED_TO_SAMPLE(bits,int##bits); \
|
|
assert(sample == SOX_INT_MAX(bits) * SOX_SIGNED_TO_SAMPLE(bits,1)); \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
sample =SOX_UNSIGNED_TO_SAMPLE(bits,SOX_UINT_MAX(bits))+SOX_UNSIGNED_TO_SAMPLE(bits,((0^SOX_INT_MIN(bits))+1))/2-1; \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && clips == 0); \
|
|
\
|
|
sample =SOX_UNSIGNED_TO_SAMPLE(bits,SOX_UINT_MAX(bits))+SOX_UNSIGNED_TO_SAMPLE(bits,((0^SOX_INT_MIN(bits))+1))/2; \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && --clips == 0); \
|
|
\
|
|
sample = SOX_SAMPLE_MAX; \
|
|
int##bits##_2 = SOX_SAMPLE_TO_SIGNED(bits,sample, clips); \
|
|
assert(int##bits##_2 == int##bits && --clips == 0);
|
|
|
|
#if defined __GNUC__
|
|
#pragma GCC system_header
|
|
#elif defined __SUNPRO_CC
|
|
#pragma disable_warn
|
|
#elif defined _MSC_VER
|
|
#pragma warning(push, 1)
|
|
#endif
|
|
|
|
int main()
|
|
{
|
|
sox_int8_t int8;
|
|
sox_int16_t int16;
|
|
sox_int24_t int24;
|
|
|
|
sox_uint8_t uint8;
|
|
sox_uint16_t uint16;
|
|
sox_uint24_t uint24;
|
|
|
|
sox_int8_t int8_2;
|
|
sox_int16_t int16_2;
|
|
sox_int24_t int24_2;
|
|
|
|
sox_sample_t sample;
|
|
size_t clips = 0;
|
|
|
|
double d;
|
|
SOX_SAMPLE_LOCALS;
|
|
|
|
TEST_UINT(8)
|
|
TEST_UINT(16)
|
|
TEST_UINT(24)
|
|
|
|
TEST_SINT(8)
|
|
TEST_SINT(16)
|
|
TEST_SINT(24)
|
|
|
|
d = -1.000000001;
|
|
sample = SOX_FLOAT_64BIT_TO_SAMPLE(d, clips);
|
|
assert(sample == SOX_SAMPLE_MIN && --clips == 0);
|
|
|
|
d = -1;
|
|
sample = SOX_FLOAT_64BIT_TO_SAMPLE(d, clips);
|
|
assert(sample == SOX_SAMPLE_MIN && clips == 0);
|
|
d = SOX_SAMPLE_TO_FLOAT_64BIT(sample,clips);
|
|
assert(d == -1 && clips == 0);
|
|
|
|
d = 1;
|
|
sample = SOX_FLOAT_64BIT_TO_SAMPLE(d, clips);
|
|
assert(sample == SOX_SAMPLE_MAX && clips == 0);
|
|
d = SOX_SAMPLE_TO_FLOAT_64BIT(sample,clips);
|
|
assert(fabs(d - 1) < 1e-9 && clips == 0);
|
|
|
|
d = 1.0000000001;
|
|
sample = SOX_FLOAT_64BIT_TO_SAMPLE(d, clips);
|
|
assert(sample == SOX_SAMPLE_MAX && --clips == 0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#if defined __SUNPRO_CC
|
|
#pragma enable_warn
|
|
#elif defined _MSC_VER
|
|
#pragma warning(pop)
|
|
#endif
|