Permalink
Browse files

Add svolume-test

The test code from pulsecore/svolume_{arm,mmx,sse,orc} is extracted and used in tests/svolume-test.
  • Loading branch information...
mkbosmans committed Sep 22, 2011
1 parent 0261f0c commit cf0c5c9ad47ba0434b0518ca79ca802d0e62153a
Showing with 211 additions and 359 deletions.
  1. +1 −0 src/.gitignore
  2. +6 −0 src/Makefile.am
  3. +0 −88 src/pulsecore/svolume_arm.c
  4. +0 −94 src/pulsecore/svolume_mmx.c
  5. +0 −87 src/pulsecore/svolume_orc.c
  6. +1 −90 src/pulsecore/svolume_sse.c
  7. +203 −0 src/tests/svolume-test.c
View
@@ -58,6 +58,7 @@ sig2str-test
smoother-test
stripnul
strlist-test
+svolume-test
sync-playback
thread-mainloop-test
thread-test
View
@@ -236,6 +236,7 @@ TESTS = \
sig2str-test \
resampler-test \
smoother-test \
+ svolume-test \
mix-test \
remix-test \
remap-test \
@@ -476,6 +477,11 @@ smoother_test_LDADD = $(AM_LDADD) libpulsecore-@PA_MAJORMINOR@.la libpulse.la li
smoother_test_CFLAGS = $(AM_CFLAGS)
smoother_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
+svolume_test_SOURCES = tests/svolume-test.c
+svolume_test_LDADD = $(AM_LDADD) libpulsecore-@PA_MAJORMINOR@.la libpulse.la libpulsecommon-@PA_MAJORMINOR@.la
+svolume_test_CFLAGS = $(AM_CFLAGS)
+svolume_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
+
proplist_test_SOURCES = tests/proplist-test.c
proplist_test_LDADD = $(AM_LDADD) libpulsecore-@PA_MAJORMINOR@.la libpulse.la libpulsecommon-@PA_MAJORMINOR@.la
proplist_test_CFLAGS = $(AM_CFLAGS)
@@ -24,9 +24,7 @@
#include <config.h>
#endif
-#include <pulsecore/random.h>
#include <pulsecore/macro.h>
-#include <pulsecore/endianmacros.h>
#include "cpu-arm.h"
@@ -120,99 +118,13 @@ static void pa_volume_s16ne_arm(int16_t *samples, int32_t *volumes, unsigned cha
: "r6", "r5", "r4", "r3", "r2", "r1", "r0", "cc"
);
}
-
-#undef RUN_TEST
-
-#ifdef RUN_TEST
-#define CHANNELS 2
-#define SAMPLES 1022
-#define TIMES 1000
-#define TIMES2 100
-#define PADDING 16
-
-static void run_test(void) {
- int16_t samples[SAMPLES];
- int16_t samples_ref[SAMPLES];
- int16_t samples_orig[SAMPLES];
- int32_t volumes[CHANNELS + PADDING];
- int i, j, padding;
- pa_do_volume_func_t func;
- pa_usec_t start, stop;
- int k;
- pa_usec_t min = INT_MAX, max = 0;
- double s1 = 0, s2 = 0;
-
- func = pa_get_volume_func(PA_SAMPLE_S16NE);
-
- printf("checking ARM %zd\n", sizeof(samples));
-
- pa_random(samples, sizeof(samples));
- memcpy(samples_ref, samples, sizeof(samples));
- memcpy(samples_orig, samples, sizeof(samples));
-
- for (i = 0; i < CHANNELS; i++)
- volumes[i] = PA_CLAMP_VOLUME(rand() >> 1);
- for (padding = 0; padding < PADDING; padding++, i++)
- volumes[i] = volumes[padding];
-
- func(samples_ref, volumes, CHANNELS, sizeof(samples));
- pa_volume_s16ne_arm(samples, volumes, CHANNELS, sizeof(samples));
- for (i = 0; i < SAMPLES; i++) {
- if (samples[i] != samples_ref[i]) {
- printf ("%d: %04x != %04x (%04x * %04x)\n", i, samples[i], samples_ref[i],
- samples_orig[i], volumes[i % CHANNELS]);
- }
- }
-
- for (k = 0; k < TIMES2; k++) {
- start = pa_rtclock_now();
- for (j = 0; j < TIMES; j++) {
- memcpy(samples, samples_orig, sizeof(samples));
- pa_volume_s16ne_arm(samples, volumes, CHANNELS, sizeof(samples));
- }
- stop = pa_rtclock_now();
-
- if (min > (stop - start)) min = stop - start;
- if (max < (stop - start)) max = stop - start;
- s1 += stop - start;
- s2 += (stop - start) * (stop - start);
- }
- pa_log_info("ARM: %llu usec (min = %llu, max = %llu, stddev = %g).", (long long unsigned int)s1,
- (long long unsigned int)min, (long long unsigned int)max, sqrt(TIMES2 * s2 - s1 * s1) / TIMES2);
-
- min = INT_MAX; max = 0;
- s1 = s2 = 0;
- for (k = 0; k < TIMES2; k++) {
- start = pa_rtclock_now();
- for (j = 0; j < TIMES; j++) {
- memcpy(samples_ref, samples_orig, sizeof(samples));
- func(samples_ref, volumes, CHANNELS, sizeof(samples));
- }
- stop = pa_rtclock_now();
-
- if (min > (stop - start)) min = stop - start;
- if (max < (stop - start)) max = stop - start;
- s1 += stop - start;
- s2 += (stop - start) * (stop - start);
- }
- pa_log_info("ref: %llu usec (min = %llu, max = %llu, stddev = %g).", (long long unsigned int)s1,
- (long long unsigned int)min, (long long unsigned int)max, sqrt(TIMES2 * s2 - s1 * s1) / TIMES2);
-
- pa_assert_se(memcmp(samples_ref, samples, sizeof(samples)) == 0);
-}
-#endif
-
#endif /* defined (__arm__) && defined (HAVE_ARMV6) */
void pa_volume_func_init_arm(pa_cpu_arm_flag_t flags) {
#if defined (__arm__) && defined (HAVE_ARMV6)
pa_log_info("Initialising ARM optimized volume functions.");
-#ifdef RUN_TEST
- run_test();
-#endif
-
pa_set_volume_func(PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_arm);
#endif /* defined (__arm__) && defined (HAVE_ARMV6) */
}
@@ -24,11 +24,7 @@
#include <config.h>
#endif
-#include <pulse/rtclock.h>
-
-#include <pulsecore/random.h>
#include <pulsecore/macro.h>
-#include <pulsecore/endianmacros.h>
#include "cpu-x86.h"
@@ -239,101 +235,11 @@ static void pa_volume_s16re_mmx(int16_t *samples, int32_t *volumes, unsigned cha
: "cc"
);
}
-
-#undef RUN_TEST
-
-#ifdef RUN_TEST
-#define CHANNELS 2
-#define SAMPLES 1022
-#define TIMES 1000
-#define TIMES2 100
-#define PADDING 16
-
-static void run_test(void) {
- int16_t samples[SAMPLES];
- int16_t samples_ref[SAMPLES];
- int16_t samples_orig[SAMPLES];
- int32_t volumes[CHANNELS + PADDING];
- int i, j, padding;
- pa_do_volume_func_t func;
- pa_usec_t start, stop;
- int k;
- pa_usec_t min = INT_MAX, max = 0;
- double s1 = 0, s2 = 0;
-
- func = pa_get_volume_func(PA_SAMPLE_S16NE);
-
- printf("checking MMX %zd\n", sizeof(samples));
-
- pa_random(samples, sizeof(samples));
- /* for (i = 0; i < SAMPLES; i++)
- samples[i] = -1; */
- memcpy(samples_ref, samples, sizeof(samples));
- memcpy(samples_orig, samples, sizeof(samples));
-
- for (i = 0; i < CHANNELS; i++)
- volumes[i] = PA_CLAMP_VOLUME(rand() >> 1);
- /* volumes[i] = 0x0000ffff; */
- for (padding = 0; padding < PADDING; padding++, i++)
- volumes[i] = volumes[padding];
-
- func(samples_ref, volumes, CHANNELS, sizeof(samples));
- pa_volume_s16ne_mmx(samples, volumes, CHANNELS, sizeof(samples));
- for (i = 0; i < SAMPLES; i++) {
- if (samples[i] != samples_ref[i]) {
- printf("%d: %04x != %04x (%04x * %08x)\n", i, samples[i], samples_ref[i],
- samples_orig[i], volumes[i % CHANNELS]);
- }
- }
-
- for (k = 0; k < TIMES2; k++) {
- start = pa_rtclock_now();
- for (j = 0; j < TIMES; j++) {
- memcpy(samples, samples_orig, sizeof(samples));
- pa_volume_s16ne_mmx(samples, volumes, CHANNELS, sizeof(samples));
- }
- stop = pa_rtclock_now();
-
- if (min > (stop - start)) min = stop - start;
- if (max < (stop - start)) max = stop - start;
- s1 += stop - start;
- s2 += (stop - start) * (stop - start);
- }
- pa_log_info("MMX: %llu usec (min = %llu, max = %llu, stddev = %g).", (long long unsigned int)s1,
- (long long unsigned int)min, (long long unsigned int)max, sqrt(TIMES2 * s2 - s1 * s1) / TIMES2);
-
- min = INT_MAX; max = 0;
- s1 = s2 = 0;
- for (k = 0; k < TIMES2; k++) {
- start = pa_rtclock_now();
- for (j = 0; j < TIMES; j++) {
- memcpy(samples_ref, samples_orig, sizeof(samples));
- func(samples_ref, volumes, CHANNELS, sizeof(samples));
- }
- stop = pa_rtclock_now();
-
- if (min > (stop - start)) min = stop - start;
- if (max < (stop - start)) max = stop - start;
- s1 += stop - start;
- s2 += (stop - start) * (stop - start);
- }
- pa_log_info("ref: %llu usec (min = %llu, max = %llu, stddev = %g).", (long long unsigned int)s1,
- (long long unsigned int)min, (long long unsigned int)max, sqrt(TIMES2 * s2 - s1 * s1) / TIMES2);
-
- pa_assert_se(memcmp(samples_ref, samples, sizeof(samples)) == 0);
-}
-#endif
-
#endif /* defined (__i386__) || defined (__amd64__) */
void pa_volume_func_init_mmx(pa_cpu_x86_flag_t flags) {
#if defined (__i386__) || defined (__amd64__)
-
-#ifdef RUN_TEST
- run_test();
-#endif
-
if ((flags & PA_CPU_X86_MMX) && (flags & PA_CPU_X86_CMOV)) {
pa_log_info("Initialising MMX optimized volume functions.");
@@ -26,9 +26,7 @@
#endif
#include "cpu-orc.h"
-#include <pulse/rtclock.h>
#include <pulsecore/sample-util.h>
-#include <pulsecore/random.h>
#include <pulsecore/svolume-orc-gen.h>
pa_do_volume_func_t fallback;
@@ -45,94 +43,9 @@ pa_volume_s16ne_orc(int16_t *samples, int32_t *volumes, unsigned channels, unsig
fallback(samples, volumes, channels, length);
}
-#undef RUN_TEST
-
-#ifdef RUN_TEST
-#define CHANNELS 2
-#define SAMPLES 1022
-#define TIMES 1000
-#define TIMES2 100
-#define PADDING 16
-
-static void run_test(void) {
- int16_t samples[SAMPLES];
- int16_t samples_ref[SAMPLES];
- int16_t samples_orig[SAMPLES];
- int32_t volumes[CHANNELS + PADDING];
- int i, j, padding;
- pa_do_volume_func_t func;
- pa_usec_t start, stop;
- int k;
- pa_usec_t min = INT_MAX, max = 0;
- double s1 = 0, s2 = 0;
-
- func = pa_get_volume_func(PA_SAMPLE_S16NE);
-
- printf("checking ORC %zd\n", sizeof(samples));
-
- pa_random(samples, sizeof(samples));
- memcpy(samples_ref, samples, sizeof(samples));
- memcpy(samples_orig, samples, sizeof(samples));
-
- for (i = 0; i < CHANNELS; i++)
- volumes[i] = PA_CLAMP_VOLUME(rand() >> 1);
- for (padding = 0; padding < PADDING; padding++, i++)
- volumes[i] = volumes[padding];
-
- func(samples_ref, volumes, CHANNELS, sizeof(samples));
- pa_volume_s16ne_orc(samples, volumes, CHANNELS, sizeof(samples));
- for (i = 0; i < SAMPLES; i++) {
- if (samples[i] != samples_ref[i]) {
- printf ("%d: %04x != %04x (%04x * %04x)\n", i, samples[i], samples_ref[i],
- samples_orig[i], volumes[i % CHANNELS]);
- }
- }
-
- for (k = 0; k < TIMES2; k++) {
- start = pa_rtclock_now();
- for (j = 0; j < TIMES; j++) {
- memcpy(samples, samples_orig, sizeof(samples));
- pa_volume_s16ne_orc(samples, volumes, CHANNELS, sizeof(samples));
- }
- stop = pa_rtclock_now();
-
- if (min > (stop - start)) min = stop - start;
- if (max < (stop - start)) max = stop - start;
- s1 += stop - start;
- s2 += (stop - start) * (stop - start);
- }
- pa_log_info("ORC: %llu usec (min = %llu, max = %llu, stddev = %g).", (long long unsigned int)s1,
- (long long unsigned int)min, (long long unsigned int)max, sqrt(TIMES2 * s2 - s1 * s1) / TIMES2);
-
- min = INT_MAX; max = 0;
- s1 = s2 = 0;
- for (k = 0; k < TIMES2; k++) {
- start = pa_rtclock_now();
- for (j = 0; j < TIMES; j++) {
- memcpy(samples_ref, samples_orig, sizeof(samples));
- func(samples_ref, volumes, CHANNELS, sizeof(samples));
- }
- stop = pa_rtclock_now();
-
- if (min > (stop - start)) min = stop - start;
- if (max < (stop - start)) max = stop - start;
- s1 += stop - start;
- s2 += (stop - start) * (stop - start);
- }
- pa_log_info("ref: %llu usec (min = %llu, max = %llu, stddev = %g).", (long long unsigned int)s1,
- (long long unsigned int)min, (long long unsigned int)max, sqrt(TIMES2 * s2 - s1 * s1) / TIMES2);
-
- pa_assert_se(memcmp(samples_ref, samples, sizeof(samples)) == 0);
-}
-#endif
-
void pa_volume_func_init_orc(void) {
pa_log_info("Initialising ORC optimized volume functions.");
-#ifdef RUN_TEST
- run_test();
-#endif
-
fallback = pa_get_volume_func(PA_SAMPLE_S16NE);
pa_set_volume_func(PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_orc);
}
Oops, something went wrong.

1 comment on commit cf0c5c9

Great work!

Please sign in to comment.