From a4a3b1b25f8386390df7929448b23649ae55b107 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sun, 8 Feb 2015 16:39:56 +0100 Subject: Modernize system tests, API cleanup --- src/systemcmds/tests/test_float.c | 8 +- src/systemcmds/tests/test_param.c | 41 ++++++--- src/systemcmds/tests/test_sensors.c | 163 +++++------------------------------- src/systemcmds/tests/test_sleep.c | 35 +------- src/systemcmds/tests/tests_main.c | 4 +- 5 files changed, 59 insertions(+), 192 deletions(-) (limited to 'src/systemcmds/tests') diff --git a/src/systemcmds/tests/test_float.c b/src/systemcmds/tests/test_float.c index bb8b6c7f5..0a81fad11 100644 --- a/src/systemcmds/tests/test_float.c +++ b/src/systemcmds/tests/test_float.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2012 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2015 PX4 Development Team. All rights reserved. * Author: @author Lorenz Meier * * Redistribution and use in source and binary forms, with or without @@ -144,9 +144,9 @@ int test_float(int argc, char *argv[]) ret = -3; } - float atan2f_ones = atan2(1.0f, 1.0f); + float atan2f_ones = atan2f(1.0f, 1.0f); - if (fabsf(atan2f_ones - 0.785398163397448278999490867136f) < FLT_EPSILON) { + if (fabsf(atan2f_ones - 0.785398163397448278999490867136f) < 2.0f * FLT_EPSILON) { printf("\t success: atan2f(1.0f, 1.0f) == 0.78539f\n"); } else { @@ -232,7 +232,7 @@ int test_float(int argc, char *argv[]) ret = -10; } - if (fabs(atan2_ones - 0.785398) < DBL_EPSILON) { + if (fabs(atan2_ones - 0.785398163397448278999490867136) < 2.0 * DBL_EPSILON) { printf("\t success: atan2(1.0, 1.0) == 0.785398\n"); } else { diff --git a/src/systemcmds/tests/test_param.c b/src/systemcmds/tests/test_param.c index 318d2505b..ab4184190 100644 --- a/src/systemcmds/tests/test_param.c +++ b/src/systemcmds/tests/test_param.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (C) 2012 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2015 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -39,11 +39,12 @@ #include #include "systemlib/err.h" - #include "systemlib/param/param.h" #include "tests.h" -PARAM_DEFINE_INT32(test, 0x12345678); +#define PARAM_MAGIC1 0x12345678 +#define PARAM_MAGIC2 0xa5a5a5a5 +PARAM_DEFINE_INT32(test, PARAM_MAGIC1); int test_param(int argc, char *argv[]) @@ -51,26 +52,44 @@ test_param(int argc, char *argv[]) param_t p; p = param_find("test"); - if (p == PARAM_INVALID) + + if (p == PARAM_INVALID) { errx(1, "test parameter not found"); + } + + if (param_reset(p) != OK) { + errx(1, "failed param reset"); + } param_type_t t = param_type(p); - if (t != PARAM_TYPE_INT32) + + if (t != PARAM_TYPE_INT32) { errx(1, "test parameter type mismatch (got %u)", (unsigned)t); + } int32_t val; - if (param_get(p, &val) != 0) + + if (param_get(p, &val) != OK) { errx(1, "failed to read test parameter"); - if (val != 0x12345678) + } + + if (val != PARAM_MAGIC1) { errx(1, "parameter value mismatch"); + } + + val = PARAM_MAGIC2; - val = 0xa5a5a5a5; - if (param_set(p, &val) != 0) + if (param_set(p, &val) != OK) { errx(1, "failed to write test parameter"); - if (param_get(p, &val) != 0) + } + + if (param_get(p, &val) != OK) { errx(1, "failed to re-read test parameter"); - if ((uint32_t)val != 0xa5a5a5a5) + } + + if ((uint32_t)val != PARAM_MAGIC2) { errx(1, "parameter value mismatch after write"); + } warnx("parameter test PASS"); diff --git a/src/systemcmds/tests/test_sensors.c b/src/systemcmds/tests/test_sensors.c index e005bf9c1..4649a83d2 100644 --- a/src/systemcmds/tests/test_sensors.c +++ b/src/systemcmds/tests/test_sensors.c @@ -1,6 +1,6 @@ /**************************************************************************** * - * Copyright (c) 2012, 2013 PX4 Development Team. All rights reserved. + * Copyright (c) 2012-2015 PX4 Development Team. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -62,24 +62,10 @@ #include #include -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -/**************************************************************************** - * Private Types - ****************************************************************************/ - -/**************************************************************************** - * Private Function Prototypes - ****************************************************************************/ - -static int accel(int argc, char *argv[]); -static int gyro(int argc, char *argv[]); -static int mag(int argc, char *argv[]); -static int baro(int argc, char *argv[]); -static int accel1(int argc, char *argv[]); -static int gyro1(int argc, char *argv[]); +static int accel(int argc, char *argv[], const char* path); +static int gyro(int argc, char *argv[], const char* path); +static int mag(int argc, char *argv[], const char* path); +static int baro(int argc, char *argv[], const char* path); /**************************************************************************** * Private Data @@ -88,27 +74,19 @@ static int gyro1(int argc, char *argv[]); struct { const char *name; const char *path; - int (* test)(int argc, char *argv[]); + int (* test)(int argc, char *argv[], const char* path); } sensors[] = { - {"accel", "/dev/accel", accel}, - {"gyro", "/dev/gyro", gyro}, - {"mag", "/dev/mag", mag}, - {"baro", "/dev/baro", baro}, - {"accel1", "/dev/accel1", accel1}, - {"gyro1", "/dev/gyro1", gyro1}, + {"accel0", ACCEL_DEVICE_PATH, accel}, + {"accel1", "/dev/accel1", accel}, + {"gyro0", GYRO_DEVICE_PATH, gyro}, + {"gyro1", "/dev/gyro1", gyro}, + {"mag0", MAG_DEVICE_PATH, mag}, + {"baro0", BARO_DEVICE_PATH, baro}, {NULL, NULL, NULL} }; -/**************************************************************************** - * Public Data - ****************************************************************************/ - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - static int -accel(int argc, char *argv[]) +accel(int argc, char *argv[], const char* path) { printf("\tACCEL: test start\n"); fflush(stdout); @@ -117,7 +95,7 @@ accel(int argc, char *argv[]) struct accel_report buf; int ret; - fd = open("/dev/accel", O_RDONLY); + fd = open(path, O_RDONLY); if (fd < 0) { printf("\tACCEL: open fail, run or or first.\n"); @@ -158,58 +136,7 @@ accel(int argc, char *argv[]) } static int -accel1(int argc, char *argv[]) -{ - printf("\tACCEL1: test start\n"); - fflush(stdout); - - int fd; - struct accel_report buf; - int ret; - - fd = open("/dev/accel1", O_RDONLY); - - if (fd < 0) { - printf("\tACCEL1: open fail, run or first.\n"); - return ERROR; - } - - /* wait at least 100ms, sensor should have data after no more than 20ms */ - usleep(100000); - - /* read data - expect samples */ - ret = read(fd, &buf, sizeof(buf)); - - if (ret != sizeof(buf)) { - printf("\tACCEL1: read1 fail (%d)\n", ret); - return ERROR; - - } else { - printf("\tACCEL1 accel: x:%8.4f\ty:%8.4f\tz:%8.4f m/s^2\n", (double)buf.x, (double)buf.y, (double)buf.z); - } - - if (fabsf(buf.x) > 30.0f || fabsf(buf.y) > 30.0f || fabsf(buf.z) > 30.0f) { - warnx("ACCEL1 acceleration values out of range!"); - return ERROR; - } - - float len = sqrtf(buf.x * buf.x + buf.y * buf.y + buf.z * buf.z); - - if (len < 8.0f || len > 12.0f) { - warnx("ACCEL1 scale error!"); - return ERROR; - } - - /* Let user know everything is ok */ - printf("\tOK: ACCEL1 passed all tests successfully\n"); - - close(fd); - - return OK; -} - -static int -gyro(int argc, char *argv[]) +gyro(int argc, char *argv[], const char* path) { printf("\tGYRO: test start\n"); fflush(stdout); @@ -218,7 +145,7 @@ gyro(int argc, char *argv[]) struct gyro_report buf; int ret; - fd = open("/dev/gyro", O_RDONLY); + fd = open(path, O_RDONLY); if (fd < 0) { printf("\tGYRO: open fail, run or first.\n"); @@ -254,52 +181,7 @@ gyro(int argc, char *argv[]) } static int -gyro1(int argc, char *argv[]) -{ - printf("\tGYRO1: test start\n"); - fflush(stdout); - - int fd; - struct gyro_report buf; - int ret; - - fd = open("/dev/gyro1", O_RDONLY); - - if (fd < 0) { - printf("\tGYRO1: open fail, run or first.\n"); - return ERROR; - } - - /* wait at least 5 ms, sensor should have data after that */ - usleep(5000); - - /* read data - expect samples */ - ret = read(fd, &buf, sizeof(buf)); - - if (ret != sizeof(buf)) { - printf("\tGYRO1: read fail (%d)\n", ret); - return ERROR; - - } else { - printf("\tGYRO1 rates: x:%8.4f\ty:%8.4f\tz:%8.4f rad/s\n", (double)buf.x, (double)buf.y, (double)buf.z); - } - - float len = sqrtf(buf.x * buf.x + buf.y * buf.y + buf.z * buf.z); - - if (len > 0.3f) { - warnx("GYRO1 scale error!"); - return ERROR; - } - - /* Let user know everything is ok */ - printf("\tOK: GYRO1 passed all tests successfully\n"); - close(fd); - - return OK; -} - -static int -mag(int argc, char *argv[]) +mag(int argc, char *argv[], const char* path) { printf("\tMAG: test start\n"); fflush(stdout); @@ -308,7 +190,7 @@ mag(int argc, char *argv[]) struct mag_report buf; int ret; - fd = open("/dev/mag", O_RDONLY); + fd = open(path, O_RDONLY); if (fd < 0) { printf("\tMAG: open fail, run or first.\n"); @@ -344,7 +226,7 @@ mag(int argc, char *argv[]) } static int -baro(int argc, char *argv[]) +baro(int argc, char *argv[], const char* path) { printf("\tBARO: test start\n"); fflush(stdout); @@ -353,7 +235,7 @@ baro(int argc, char *argv[]) struct baro_report buf; int ret; - fd = open("/dev/baro", O_RDONLY); + fd = open(path, O_RDONLY); if (fd < 0) { printf("\tBARO: open fail, run or first.\n"); @@ -401,12 +283,11 @@ int test_sensors(int argc, char *argv[]) for (i = 0; sensors[i].name; i++) { printf(" sensor: %s\n", sensors[i].name); - /* Flush and leave enough time for the flush to become effective */ + /* Flush */ fflush(stdout); - usleep(50000); /* Test the sensor - if the tests crash at this point, the right sensor name has been printed */ - ret += sensors[i].test(argc, argv); + ret += sensors[i].test(argc, argv, sensors[i].path); } return ret; diff --git a/src/systemcmds/tests/test_sleep.c b/src/systemcmds/tests/test_sleep.c index ae682b542..3097e68a4 100644 --- a/src/systemcmds/tests/test_sleep.c +++ b/src/systemcmds/tests/test_sleep.c @@ -51,42 +51,9 @@ #include "tests.h" -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -/**************************************************************************** - * Private Types - ****************************************************************************/ - -/**************************************************************************** - * Private Function Prototypes - ****************************************************************************/ - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -/**************************************************************************** - * Public Data - ****************************************************************************/ - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: test_sleep - ****************************************************************************/ - int test_sleep(int argc, char *argv[]) { - unsigned int nsleeps = 100; + unsigned int nsleeps = 20; printf("\t %d 100ms sleeps\n", nsleeps); fflush(stdout); diff --git a/src/systemcmds/tests/tests_main.c b/src/systemcmds/tests/tests_main.c index 2f586fa85..04ab6d633 100644 --- a/src/systemcmds/tests/tests_main.c +++ b/src/systemcmds/tests/tests_main.c @@ -103,8 +103,8 @@ const struct { {"jig", test_jig, OPT_NOJIGTEST | OPT_NOALLTEST}, {"param", test_param, 0}, {"bson", test_bson, 0}, - {"file", test_file, 0}, - {"file2", test_file2, OPT_NOJIGTEST | OPT_NOALLTEST}, + {"file", test_file, OPT_NOJIGTEST | OPT_NOALLTEST}, + {"file2", test_file2, OPT_NOJIGTEST}, {"mixer", test_mixer, OPT_NOJIGTEST | OPT_NOALLTEST}, {"rc", test_rc, OPT_NOJIGTEST | OPT_NOALLTEST}, {"conv", test_conv, OPT_NOJIGTEST | OPT_NOALLTEST}, -- cgit v1.2.3