mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	tests: add test for rounding
This commit is contained in:
		
							parent
							
								
									419517fd55
								
							
						
					
					
						commit
						a458b39774
					
				
					 1 changed files with 40 additions and 20 deletions
				
			
		| 
						 | 
					@ -127,8 +127,9 @@ static void run_test(const char *name,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_s8(void)
 | 
					static void test_f32_s8(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
	static const int8_t out[] = { 0, 127, -128, 64, 192, 127, -128 };
 | 
							1.0f/160.f, 1.0f/256.f, -1.0f/160.f, -1.0f/256.f };
 | 
				
			||||||
 | 
						static const int8_t out[] = { 0, 127, -128, 64, 192, 127, -128, 1, 0, -1, 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_s8", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_s8", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_s8_c);
 | 
								true, true, conv_f32_to_s8_c);
 | 
				
			||||||
| 
						 | 
					@ -157,8 +158,9 @@ static void test_s8_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_u8(void)
 | 
					static void test_f32_u8(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
	static const uint8_t out[] = { 128, 255, 0, 192, 64, 255, 0, };
 | 
							1.0f/160.f, 1.0f/256.f, -1.0f/160.f, -1.0f/256.f };
 | 
				
			||||||
 | 
						static const uint8_t out[] = { 128, 255, 0, 192, 64, 255, 0, 129, 128, 127, 128 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_u8", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_u8", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_u8_c);
 | 
								true, true, conv_f32_to_u8_c);
 | 
				
			||||||
| 
						 | 
					@ -187,8 +189,10 @@ static void test_u8_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_u16(void)
 | 
					static void test_f32_u16(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
	static const uint16_t out[] = { 32768, 65535, 0, 49152, 16384, 65535, 0 };
 | 
							1.0f/49152.f, 1.0f/65536.f, -1.0f/49152.f, -1.0f/65536.f };
 | 
				
			||||||
 | 
						static const uint16_t out[] = { 32768, 65535, 0, 49152, 16384, 65535, 0,
 | 
				
			||||||
 | 
							32769, 32768, 32767, 32768 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_u16", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_u16", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_u16_c);
 | 
								true, true, conv_f32_to_u16_c);
 | 
				
			||||||
| 
						 | 
					@ -209,8 +213,10 @@ static void test_u16_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_s16(void)
 | 
					static void test_f32_s16(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
	static const int16_t out[] = { 0, 32767, -32768, 16384, -16384, 32767, -32768 };
 | 
							1.0f/49152.f, 1.0f/65536.f, -1.0f/49152.f, -1.0f/65536.f };
 | 
				
			||||||
 | 
						static const int16_t out[] = { 0, 32767, -32768, 16384, -16384, 32767, -32768,
 | 
				
			||||||
 | 
							1, 0, -1, 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_s16", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_s16", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_s16_c);
 | 
								true, true, conv_f32_to_s16_c);
 | 
				
			||||||
| 
						 | 
					@ -267,9 +273,11 @@ static void test_s16_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_u32(void)
 | 
					static void test_f32_u32(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
 | 
							1.0f/0xa00000, 1.0f/0x1000000, -1.0f/0xa00000, -1.0f/0x1000000 };
 | 
				
			||||||
	static const uint32_t out[] = { 0x80000000, 0xffffff00, 0x0, 0xc0000000, 0x40000000,
 | 
						static const uint32_t out[] = { 0x80000000, 0xffffff00, 0x0, 0xc0000000, 0x40000000,
 | 
				
			||||||
					0xffffff00, 0x0 };
 | 
										0xffffff00, 0x0,
 | 
				
			||||||
 | 
							0x80000100, 0x80000000, 0x7fffff00, 0x80000000 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_u32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_u32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_u32_c);
 | 
								true, true, conv_f32_to_u32_c);
 | 
				
			||||||
| 
						 | 
					@ -290,9 +298,11 @@ static void test_u32_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_s32(void)
 | 
					static void test_f32_s32(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
 | 
							1.0f/0xa00000, 1.0f/0x1000000, -1.0f/0xa00000, -1.0f/0x1000000 };
 | 
				
			||||||
	static const int32_t out[] = { 0, 0x7fffff00, 0x80000000, 0x40000000, 0xc0000000,
 | 
						static const int32_t out[] = { 0, 0x7fffff00, 0x80000000, 0x40000000, 0xc0000000,
 | 
				
			||||||
					0x7fffff00, 0x80000000 };
 | 
										0x7fffff00, 0x80000000,
 | 
				
			||||||
 | 
							0x00000100, 0x00000000, 0xffffff00, 0x00000000 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_s32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_s32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_s32_c);
 | 
								true, true, conv_f32_to_s32_c);
 | 
				
			||||||
| 
						 | 
					@ -345,10 +355,13 @@ static void test_s32_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_u24(void)
 | 
					static void test_f32_u24(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
 | 
							1.0f/0xa00000, 1.0f/0x1000000, -1.0f/0xa00000, -1.0f/0x1000000 };
 | 
				
			||||||
	static const uint24_t out[] = { U32_TO_U24(0x00800000), U32_TO_U24(0xffffff),
 | 
						static const uint24_t out[] = { U32_TO_U24(0x00800000), U32_TO_U24(0xffffff),
 | 
				
			||||||
		U32_TO_U24(0x000000), U32_TO_U24(0xc00000), U32_TO_U24(0x400000),
 | 
							U32_TO_U24(0x000000), U32_TO_U24(0xc00000), U32_TO_U24(0x400000),
 | 
				
			||||||
		U32_TO_U24(0xffffff), U32_TO_U24(0x000000) };
 | 
							U32_TO_U24(0xffffff), U32_TO_U24(0x000000),
 | 
				
			||||||
 | 
							U32_TO_U24(0x800001), U32_TO_U24(0x800000), U32_TO_U24(0x7fffff),
 | 
				
			||||||
 | 
							U32_TO_U24(0x800000) };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_u24", in, sizeof(in[0]), out, 3, SPA_N_ELEMENTS(in),
 | 
						run_test("test_f32_u24", in, sizeof(in[0]), out, 3, SPA_N_ELEMENTS(in),
 | 
				
			||||||
			true, true, conv_f32_to_u24_c);
 | 
								true, true, conv_f32_to_u24_c);
 | 
				
			||||||
| 
						 | 
					@ -370,10 +383,13 @@ static void test_u24_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_s24(void)
 | 
					static void test_f32_s24(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
 | 
							1.0f/0xa00000, 1.0f/0x1000000, -1.0f/0xa00000, -1.0f/0x1000000 };
 | 
				
			||||||
	static const int24_t out[] = { S32_TO_S24(0), S32_TO_S24(0x7fffff),
 | 
						static const int24_t out[] = { S32_TO_S24(0), S32_TO_S24(0x7fffff),
 | 
				
			||||||
		S32_TO_S24(0xff800000), S32_TO_S24(0x400000), S32_TO_S24(0xc00000),
 | 
							S32_TO_S24(0xff800000), S32_TO_S24(0x400000), S32_TO_S24(0xc00000),
 | 
				
			||||||
		S32_TO_S24(0x7fffff), S32_TO_S24(0xff800000) };
 | 
							S32_TO_S24(0x7fffff), S32_TO_S24(0xff800000),
 | 
				
			||||||
 | 
							S32_TO_S24(0x000001), S32_TO_S24(0x000000), S32_TO_S24(0xffffffff),
 | 
				
			||||||
 | 
							S32_TO_S24(0x000000) };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_s24", in, sizeof(in[0]), out, 3, SPA_N_ELEMENTS(in),
 | 
						run_test("test_f32_s24", in, sizeof(in[0]), out, 3, SPA_N_ELEMENTS(in),
 | 
				
			||||||
			true, true, conv_f32_to_s24_c);
 | 
								true, true, conv_f32_to_s24_c);
 | 
				
			||||||
| 
						 | 
					@ -427,9 +443,11 @@ static void test_s24_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_u24_32(void)
 | 
					static void test_f32_u24_32(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
 | 
							1.0f/0xa00000, 1.0f/0x1000000, -1.0f/0xa00000, -1.0f/0x1000000 };
 | 
				
			||||||
	static const uint32_t out[] = { 0x800000, 0xffffff, 0x0, 0xc00000, 0x400000,
 | 
						static const uint32_t out[] = { 0x800000, 0xffffff, 0x0, 0xc00000, 0x400000,
 | 
				
			||||||
					0xffffff, 0x000000 };
 | 
										0xffffff, 0x000000,
 | 
				
			||||||
 | 
							0x800001, 0x800000, 0x7fffff, 0x800000 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_u24_32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_u24_32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_u24_32_c);
 | 
								true, true, conv_f32_to_u24_32_c);
 | 
				
			||||||
| 
						 | 
					@ -450,9 +468,11 @@ static void test_u24_32_f32(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_f32_s24_32(void)
 | 
					static void test_f32_s24_32(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f };
 | 
						static const float in[] = { 0.0f, 1.0f, -1.0f, 0.5f, -0.5f, 1.1f, -1.1f,
 | 
				
			||||||
 | 
							1.0f/0xa00000, 1.0f/0x1000000, -1.0f/0xa00000, -1.0f/0x1000000 };
 | 
				
			||||||
	static const int32_t out[] = { 0, 0x7fffff, 0xff800000, 0x400000, 0xffc00000,
 | 
						static const int32_t out[] = { 0, 0x7fffff, 0xff800000, 0x400000, 0xffc00000,
 | 
				
			||||||
					0x7fffff, 0xff800000 };
 | 
										0x7fffff, 0xff800000,
 | 
				
			||||||
 | 
							0x000001, 0x000000, 0xffffffff, 0x000000 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	run_test("test_f32_s24_32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
						run_test("test_f32_s24_32", in, sizeof(in[0]), out, sizeof(out[0]), SPA_N_ELEMENTS(out),
 | 
				
			||||||
			true, true, conv_f32_to_s24_32_c);
 | 
								true, true, conv_f32_to_s24_32_c);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue