#include <stdlib.h>
#include <limits.h>
#include "utils.h"
+#include <math.h>
/* We don't actually want it to exit... */
static jmp_buf exited;
/* Test helpers. */
int main(int argc, char *argv[])
{
- plan_tests(454);
+ plan_tests(500);
/* opt_set_bool */
{
else
fail("FIXME: Handle other long sizes");
}
+ /* opt_set_floatval */
+ {
+ float arg = 1000;
+ reset_options();
+ opt_register_arg("-a", opt_set_floatval, NULL, &arg, "All");
+ ok1(parse_args(&argc, &argv, "-a", "9999", NULL));
+ ok1(arg == 9999);
+ ok1(parse_args(&argc, &argv, "-a", "-9999", NULL));
+ ok1(arg == -9999);
+ ok1(parse_args(&argc, &argv, "-a", "1e33", NULL));
+ ok1(arg == 1e33f);
+ /*overflows should fail */
+ ok1(!parse_args(&argc, &argv, "-a", "1e39", NULL));
+ ok1(!parse_args(&argc, &argv, "-a", "-1e40", NULL));
+ /*low numbers lose precision but work */
+ ok1(parse_args(&argc, &argv, "-a", "1e-39", NULL));
+ ok1(arg == 1e-39f);
+ ok1(parse_args(&argc, &argv, "-a", "-1e-45", NULL));
+ ok1(arg == -1e-45f);
+ ok1(!parse_args(&argc, &argv, "-a", "1e-99", NULL));
+ ok1(parse_args(&argc, &argv, "-a", "0", NULL));
+ ok1(arg == 0);
+ ok1(parse_args(&argc, &argv, "-a", "1.111111111111", NULL));
+ ok1(arg == 1.1111112f);
+ ok1(parse_args(&argc, &argv, "-a", "INF", NULL));
+ ok1(isinf(arg));
+ ok1(!parse_args(&argc, &argv, "-a", "100crap", NULL));
+ ok1(!parse_args(&argc, &argv, "-a", "1e7crap", NULL));
+ }
+ /* opt_set_doubleval */
+ {
+ double arg = 1000;
+ reset_options();
+ opt_register_arg("-a", opt_set_doubleval, NULL, &arg, "All");
+ ok1(parse_args(&argc, &argv, "-a", "9999", NULL));
+ ok1(arg == 9999);
+ ok1(parse_args(&argc, &argv, "-a", "-9999", NULL));
+ ok1(arg == -9999);
+ ok1(parse_args(&argc, &argv, "-a", "1e-299", NULL));
+ ok1(arg == 1e-299);
+ ok1(parse_args(&argc, &argv, "-a", "-1e-305", NULL));
+ ok1(arg == -1e-305);
+ ok1(!parse_args(&argc, &argv, "-a", "1e-499", NULL));
+ ok1(parse_args(&argc, &argv, "-a", "0", NULL));
+ ok1(arg == 0);
+ ok1(parse_args(&argc, &argv, "-a", "1.1111111111111111111", NULL));
+ ok1(arg == 1.1111111111111112);
+ ok1(parse_args(&argc, &argv, "-a", "INF", NULL));
+ ok1(isinf(arg));
+ ok1(!parse_args(&argc, &argv, "-a", "100crap", NULL));
+ ok1(!parse_args(&argc, &argv, "-a", "1e7crap", NULL));
+ }
{
const long long k = 1024;
ok1(buf[OPT_SHOW_LEN] == '!');
}
+ /* opt_show_floatval */
+ {
+ float f;
+ char buf[OPT_SHOW_LEN+2] = { 0 };
+ buf[OPT_SHOW_LEN] = '!';
+
+ f = -77.5;
+ opt_show_floatval(buf, &f);
+ ok1(strcmp(buf, "-77.500000") == 0);
+ ok1(buf[OPT_SHOW_LEN] == '!');
+
+ f = 77.5;
+ opt_show_floatval(buf, &f);
+ ok1(strcmp(buf, "77.500000") == 0);
+ ok1(buf[OPT_SHOW_LEN] == '!');
+ }
+
+ /* opt_show_doubleval */
+ {
+ double d;
+ char buf[OPT_SHOW_LEN+2] = { 0 };
+ buf[OPT_SHOW_LEN] = '!';
+
+ d = -77;
+ opt_show_doubleval(buf, &d);
+ ok1(strcmp(buf, "-77.000000") == 0);
+ ok1(buf[OPT_SHOW_LEN] == '!');
+
+ d = 77;
+ opt_show_doubleval(buf, &d);
+ ok1(strcmp(buf, "77.000000") == 0);
+ ok1(buf[OPT_SHOW_LEN] == '!');
+ }
+
/* opt_log_stderr. */
{
reset_options();