Revision: 65205
http://sourceforge.net/p/brlcad/code/65205
Author: starseeker
Date: 2015-06-05 20:19:20 +0000 (Fri, 05 Jun 2015)
Log Message:
-----------
Add a test for floating point numbers
Modified Paths:
--------------
brlcad/trunk/include/bu/opt.h
brlcad/trunk/src/libbu/opt.c
brlcad/trunk/src/libbu/tests/CMakeLists.txt
brlcad/trunk/src/libbu/tests/opt.c
Modified: brlcad/trunk/include/bu/opt.h
===================================================================
--- brlcad/trunk/include/bu/opt.h 2015-06-05 19:53:38 UTC (rev 65204)
+++ brlcad/trunk/include/bu/opt.h 2015-06-05 20:19:20 UTC (rev 65205)
@@ -196,10 +196,14 @@
* conversion.
*/
BU_EXPORT extern int bu_opt_arg_int(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
+BU_EXPORT extern int bu_opt_arg_fastf_t(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
/* TODO - unimplemented */
+BU_EXPORT extern int bu_opt_arg_bool(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
BU_EXPORT extern int bu_opt_arg_long(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
-BU_EXPORT extern int bu_opt_arg_bool(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
+BU_EXPORT extern int bu_opt_arg_float(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
BU_EXPORT extern int bu_opt_arg_double(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
+BU_EXPORT extern int bu_opt_arg_ascii(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
+BU_EXPORT extern int bu_opt_arg_utf8(struct bu_vls *msg, struct bu_opt_data
*data, void *set_var);
/** @} */
Modified: brlcad/trunk/src/libbu/opt.c
===================================================================
--- brlcad/trunk/src/libbu/opt.c 2015-06-05 19:53:38 UTC (rev 65204)
+++ brlcad/trunk/src/libbu/opt.c 2015-06-05 20:19:20 UTC (rev 65205)
@@ -25,6 +25,7 @@
#include <stdlib.h> /* for strtol */
#include <limits.h> /* for INT_MAX */
#include <ctype.h> /* for isspace */
+#include <errno.h> /* for errno */
#include "bu/log.h"
#include "bu/malloc.h"
@@ -733,6 +734,11 @@
return -1;
}
+ if (errno == ERANGE) {
+ if (msg) bu_vls_printf(msg, "Invalid input for int (range error):
%s\n", data->argv[0]);
+ return -1;
+ }
+
/* If the long fits inside an int, we're OK */
if (l <= INT_MAX || l >= -INT_MAX) {
i = (int)l;
@@ -746,7 +752,41 @@
return 1;
}
+int
+bu_opt_arg_fastf_t(struct bu_vls *msg, struct bu_opt_data *data, void *set_var)
+{
+ fastf_t f;
+ fastf_t *f_set = (fastf_t *)set_var;
+ char *endptr = NULL;
+ if (!data) return 0;
+ if (!data || !data->argv || !data->argv[0] || strlen(data->argv[0]) == 0
|| data->argc != 1 ) {
+ return 0;
+ }
+
+ if (sizeof(fastf_t) == sizeof(float)) {
+ f = strtof(data->argv[0], &endptr);
+ }
+
+ if (sizeof(fastf_t) == sizeof(double)) {
+ f = strtod(data->argv[0], &endptr);
+ }
+
+ if (endptr != NULL && strlen(endptr) > 0) {
+ /* Had some invalid character in the input, fail */
+ if (msg) bu_vls_printf(msg, "Invalid string specifier for fastf_t:
%s\n", data->argv[0]);
+ return -1;
+ }
+
+ if (errno == ERANGE) {
+ if (msg) bu_vls_printf(msg, "Invalid input for fastf_t (range error):
%s\n", data->argv[0]);
+ return -1;
+ }
+
+ if (f_set) (*f_set) = f;
+ return 1;
+}
+
/*
* Local Variables:
* mode: C
Modified: brlcad/trunk/src/libbu/tests/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/libbu/tests/CMakeLists.txt 2015-06-05 19:53:38 UTC (rev
65204)
+++ brlcad/trunk/src/libbu/tests/CMakeLists.txt 2015-06-05 20:19:20 UTC (rev
65205)
@@ -474,6 +474,7 @@
add_test(NAME bu_opt_3_00 COMMAND tester_bu_opt 3 -n)
add_test(NAME bu_opt_3_01 COMMAND tester_bu_opt 3 -n 1)
add_test(NAME bu_opt_3_02 COMMAND tester_bu_opt 3 -n -1)
+add_test(NAME bu_opt_3_03 COMMAND tester_bu_opt 3 -n -1 -f -3.0e-3)
#
# *********** date-time.c tests ************
Modified: brlcad/trunk/src/libbu/tests/opt.c
===================================================================
--- brlcad/trunk/src/libbu/tests/opt.c 2015-06-05 19:53:38 UTC (rev 65204)
+++ brlcad/trunk/src/libbu/tests/opt.c 2015-06-05 20:19:20 UTC (rev 65205)
@@ -128,6 +128,7 @@
struct bu_ptbl *results = NULL;
struct bu_vls parse_msgs = BU_VLS_INIT_ZERO;
static int i = 0;
+ static fastf_t f = 0;
static struct bu_color color = BU_COLOR_INIT_ZERO;
enum d1_opt_ind {D1_HELP, D1_VERBOSITY};
@@ -145,15 +146,15 @@
BU_OPT_DESC_NULL
};
- enum d3_opt_ind {D3_HELP, D3_NUM};
+ enum d3_opt_ind {D3_HELP, D3_NUM, D3_FASTF};
struct bu_opt_desc d3[4] = {
{D3_HELP, 0, 0, "h", "help", NULL, "", help_str, NULL},
{D3_NUM, 1, 1, "n", "num", &bu_opt_arg_int, "#", "Read number", (void
*)&i},
+ {D3_FASTF, 1, 1, "f", "fastf_t", &bu_opt_arg_fastf_t, "#", "Read
number", (void *)&f},
BU_OPT_DESC_NULL
};
-
if (argc < 2)
bu_exit(1, "ERROR: wrong number of parameters");
@@ -187,6 +188,7 @@
print_results(results);
if (test_num == 1 || test_num == 3)
bu_log("Int var: %d\n", i);
+ bu_log("Fastf_t var: %f\n", f);
if (test_num == 2)
bu_log("Color var: %0.2f, %0.2f, %0.2f\n", color.buc_rgb[0],
color.buc_rgb[1], color.buc_rgb[2]);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits