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

Reply via email to