diff options
| author | Keith Packard <keithp@keithp.com> | 2013-08-28 22:52:58 -0600 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-08-28 22:52:58 -0600 | 
| commit | dcc51bb18985c24fa35bce0dd42ea3d847b960bf (patch) | |
| tree | 652c06c900b01b3c43f674e0f121109cc54b1120 /src/test | |
| parent | 7c82acc1c1c5b7b4da7c7ecb3b2fd90140e4c703 (diff) | |
| parent | a73b02518fcbc9fc0807ed8e141d3a06e8ad8214 (diff) | |
Merge remote-tracking branch 'origin/telemini'
Signed-off-by: Keith Packard <keithp@keithp.com>
Conflicts:
	src/core/ao_telemetry.c
	src/core/ao_telemetry.h
Added both Mini and Metrum telemetry defines
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/Makefile | 9 | ||||
| -rw-r--r-- | src/test/ao_int64_test.c | 115 | ||||
| -rw-r--r-- | src/test/ao_ms5607_convert_test.c | 96 | 
3 files changed, 219 insertions, 1 deletions
| diff --git a/src/test/Makefile b/src/test/Makefile index 75b1f848..5eee6bbb 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -2,7 +2,8 @@ vpath % ..:../core:../drivers:../util:../micropeak:../aes  PROGS=ao_flight_test ao_flight_test_baro ao_flight_test_accel ao_flight_test_noisy_accel ao_flight_test_mm \  	ao_gps_test ao_gps_test_skytraq ao_gps_test_ublox ao_convert_test ao_convert_pa_test ao_fec_test \ -	ao_aprs_test ao_micropeak_test ao_fat_test ao_aes_test +	ao_aprs_test ao_micropeak_test ao_fat_test ao_aes_test ao_int64_test \ +	ao_ms5607_convert_test  INCS=ao_kalman.h ao_ms5607.h ao_log.h ao_data.h altitude-pa.h altitude.h @@ -73,3 +74,9 @@ ao_fat_test: ao_fat_test.c ao_fat.c ao_bufio.c  ao_aes_test: ao_aes_test.c ao_aes.c ao_aes_tables.c  	cc $(CFLAGS) -o $@ ao_aes_test.c + +ao_int64_test: ao_int64_test.c ao_int64.c ao_int64.h +	cc $(CFLAGS) -o $@ ao_int64_test.c + +ao_ms5607_convert_test: ao_ms5607_convert_test.c ao_ms5607_convert_8051.c ao_int64.c ao_int64.h +	cc $(CFLAGS) -o $@ ao_ms5607_convert_test.c diff --git a/src/test/ao_int64_test.c b/src/test/ao_int64_test.c new file mode 100644 index 00000000..8557a1c7 --- /dev/null +++ b/src/test/ao_int64_test.c @@ -0,0 +1,115 @@ +/* + * Copyright © 2013 Keith Packard <keithp@keithp.com> + * + * 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; version 2 of the License. + * + * 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., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#define __data +#define __pdata +#define __xdata +#define __reentrant + +#include <ao_int64.h> +#include <ao_int64.c> +#include <stdio.h> +#include <stdlib.h> + +int	errors; + +#define test_o(op,func,mod,a,b,ao_a,ao_b) do {				\ +		r = (a) op (b);						\ +		func(&ao_r, ao_a, ao_b);				\ +		c = ao_cast64(&ao_r);					\ +		if (c != r) {						\ +			printf ("trial %4d: %lld " #func mod " %lld = %lld (should be %lld)\n", \ +				trial, (int64_t) (a), (int64_t) b, c, r); \ +			++errors;					\ +		}							\ +	} while (0) + +#define test(op,func,a,b,ao_a,ao_b) test_o(op,func,"",a,b,ao_a,ao_b) + +#define test_a(op,func,a,b,ao_a,ao_b) do {	\ +		ao_r = *ao_a;			\ +		test_o(op,func,"_a",a,b,&ao_r,ao_b);	\ +	} while (0) + +#define test_b(op,func,a,b,ao_a,ao_b) do {	\ +		ao_r = *ao_b;			\ +		test_o(op,func,"_b",a,b,ao_a,&ao_r);	\ +	} while (0) + +#define test_x(op,func,a,b,ao_a,ao_b) do {	\ +		ao_r = *ao_a;			\ +		test_o(op,func,"_xa",a,a,&ao_r,&ao_r);	\ +		ao_r = *ao_b;			\ +		test_o(op,func,"_xb",b,b,&ao_r,&ao_r);	\ +	} while (0) + +void +do_test(int trial, int64_t a, int64_t b) +{ +	int64_t	r, c; +	ao_int64_t	ao_a, ao_b, ao_r; + +	ao_int64_init64(&ao_a, a >> 32, a); +	ao_int64_init64(&ao_b, b >> 32, b); + +	test(+, ao_plus64, a, b, &ao_a, &ao_b); +	test_a(+, ao_plus64, a, b, &ao_a, &ao_b); +	test_b(+, ao_plus64, a, b, &ao_a, &ao_b); +	test_x(+, ao_plus64, a, b, &ao_a, &ao_b); +	test(-, ao_minus64, a, b, &ao_a, &ao_b); +	test_a(-, ao_minus64, a, b, &ao_a, &ao_b); +	test_b(-, ao_minus64, a, b, &ao_a, &ao_b); +	test_x(-, ao_minus64, a, b, &ao_a, &ao_b); +	test(*, ao_mul64_32_32,(int64_t) (int32_t) a, (int32_t) b, (int32_t) a, (int32_t) b); +	test(*, ao_mul64, a, b, &ao_a, &ao_b); +	test_a(*, ao_mul64, a, b, &ao_a, &ao_b); +	test_b(*, ao_mul64, a, b, &ao_a, &ao_b); +	test_x(*, ao_mul64, a, b, &ao_a, &ao_b); +	test(*, ao_mul64_64_16, a, (uint16_t) b, &ao_a, (uint16_t) b); +	test_a(*, ao_mul64_64_16, a, (uint16_t) b, &ao_a, (uint16_t) b); +	test(>>, ao_rshift64, a, (uint8_t) b & 0x3f, &ao_a, (uint8_t) b & 0x3f); +	test_a(>>, ao_rshift64, a, (uint8_t) b & 0x3f, &ao_a, (uint8_t) b & 0x3f); +	test(<<, ao_lshift64, a, (uint8_t) b & 0x3f, &ao_a, (uint8_t) b & 0x3f); +	test_a(<<, ao_lshift64, a, (uint8_t) b & 0x3f, &ao_a, (uint8_t) b & 0x3f); +} + +#define TESTS	10000000 + +static int64_t +random64(void) +{ +	return (int64_t) random() + ((int64_t) random() << 31) /* + ((int64_t) random() << 33) */; +} + +int +main (int argc, char **argv) +{ +	int	i, start; + +	if (argv[1]) +		start = atoi(argv[1]); +	else +		start = 0; +	srandom(1000); +	for (i = 0; i < TESTS; i++) { +		int64_t a = random64(); +		int64_t b = random64(); +		if (i >= start) +			do_test(i, a, b); +	} +	return errors; +} diff --git a/src/test/ao_ms5607_convert_test.c b/src/test/ao_ms5607_convert_test.c new file mode 100644 index 00000000..ad593204 --- /dev/null +++ b/src/test/ao_ms5607_convert_test.c @@ -0,0 +1,96 @@ +/* + * Copyright © 2013 Keith Packard <keithp@keithp.com> + * + * 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; version 2 of the License. + * + * 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., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#define __xdata +#define __data +#define __pdata +#define __reentrant + +#include <stdint.h> +#include <ao_ms5607.h> + +struct ao_ms5607_prom ms5607_prom = { +	0x002c, +	0xa6e0, +	0x988e, +	0x6814, +	0x5eff, +	0x8468, +	0x6c86, +	0xa271, +}; + +int32_t D1_mm = 6179630; +int32_t D2_mm = 8933155; + +#include <ao_ms5607_convert.c> +#define ao_ms5607_convert ao_ms5607_convert_8051 +#include <ao_ms5607_convert_8051.c> +#include <ao_int64.c> +#include <stdio.h> +#include <stdlib.h> + +struct ao_ms5607_sample ao_sample = { +	6179630, +	8933155 +}; + +int errors; + +void test(int trial, struct ao_ms5607_sample *sample) +{ +	struct ao_ms5607_value	value, value_8051; + +	ao_ms5607_convert(sample, &value); +	ao_ms5607_convert_8051(sample, &value_8051); +	if (value.temp != value_8051.temp || value.pres != value_8051.pres) { +		++errors; +		printf ("trial %d: %d, %d -> %d, %d (should be %d, %d)\n", +			trial, +			sample->pres, sample->temp, +			value_8051.pres, value_8051.temp, +			value.pres, value.temp); +	} +} + +#define TESTS	10000000 + +#include <stdlib.h> + +static int32_t rand24(void) { return random() & 0xffffff; } + +int +main(int argc, char **argv) +{ +	struct ao_ms5607_sample sample; +	int	i, start; + +	if (argv[1]) +		start = atoi(argv[1]); +	else +		start = 0; + +	srandom(10000); +	test(-1, &ao_sample); +	for (i = 0; i < TESTS; i++) { +		sample.pres = rand24(); +		sample.temp = rand24(); +		if (i >= start) +			test(i, &sample); +	} +	return errors; +} | 
