tst-strtod2.c 844 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct test
  4. {
  5. const char *str;
  6. double result;
  7. size_t offset;
  8. } tests[] =
  9. {
  10. { "0xy", 0.0, 1 },
  11. { "0x.y", 0.0, 1 },
  12. { "0x0.y", 0.0, 4 },
  13. { "0x.0y", 0.0, 4 },
  14. { ".y", 0.0, 0 },
  15. { "0.y", 0.0, 2 },
  16. { ".0y", 0.0, 2 }
  17. };
  18. static int
  19. do_test (void)
  20. {
  21. int status = 0;
  22. for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
  23. {
  24. char *ep;
  25. double r = strtod (tests[i].str, &ep);
  26. if (r != tests[i].result)
  27. {
  28. printf ("test %zu r = %g, expect %g\n", i, r, tests[i].result);
  29. status = 1;
  30. }
  31. if (ep != tests[i].str + tests[i].offset)
  32. {
  33. printf ("test %zu strtod parsed %tu characters, expected %zu\n",
  34. i, ep - tests[i].str, tests[i].offset);
  35. status = 1;
  36. }
  37. }
  38. return status;
  39. }
  40. #define TEST_FUNCTION do_test ()
  41. #include "../test-skeleton.c"