test.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "flt_arith.h"
  2. struct tests {
  3. char *op1, *op2;
  4. int oper;
  5. char *result;
  6. } tests[] = {
  7. { "1.0", 0, 0, "1.0" },
  8. { "-1.0", 0, 0, "-1.0" },
  9. { "0.0", 0, 0, "0.0" },
  10. { "1.234567", 0, 0, "1.234567" },
  11. { "1.234567", 0, 'D', "1.0" },
  12. { "1.234567", 0, 'R', "2.34567e-1" },
  13. { "32768", "32768", '+', "6.5536e+4" },
  14. { "32768", "32767", '-', "1.0" },
  15. { "32768", "32768", '*', "1.073741824e+9" },
  16. { "32768", "32768", '/', "1.0" },
  17. { "1.234567e20", "-1.234567e20", '+', "0.0" },
  18. { "1e100", "1e100", '+', "2.0e+100" },
  19. { "1e110", "10", '*', "1.0e+111" },
  20. { "0.5e100", "0.5e100", '*', "2.5e+199" },
  21. { 0, 0, 0, 0}
  22. };
  23. main()
  24. {
  25. register struct tests *p = tests;
  26. int exit_status = 0;
  27. while (p->op1) {
  28. if (! dotest(p)) exit_status = 1;
  29. p++;
  30. }
  31. exit(exit_status);
  32. }
  33. int
  34. dotest(p)
  35. register struct tests *p;
  36. {
  37. char buf[128];
  38. flt_arith e1, e2, e;
  39. static int testno = 0;
  40. testno++;
  41. flt_str2flt(p->op1, &e1);
  42. switch(p->oper) {
  43. case '+':
  44. flt_str2flt(p->op2, &e2);
  45. flt_add(&e1, &e2, &e);
  46. break;
  47. case '-':
  48. flt_str2flt(p->op2, &e2);
  49. flt_sub(&e1, &e2, &e);
  50. break;
  51. case '*':
  52. flt_str2flt(p->op2, &e2);
  53. flt_mul(&e1, &e2, &e);
  54. break;
  55. case '/':
  56. flt_str2flt(p->op2, &e2);
  57. flt_div(&e1, &e2, &e);
  58. break;
  59. case 'D':
  60. /* integer part of flt_modf */
  61. flt_modf(&e1, &e, &e2);
  62. break;
  63. case 'R':
  64. /* fraction part of flt_modf */
  65. flt_modf(&e1, &e2, &e);
  66. break;
  67. case 'U':
  68. /* unary minus */
  69. e = e1;
  70. flt_umin(&e);
  71. break;
  72. default:
  73. e = e1;
  74. break;
  75. }
  76. flt_flt2str(&e, buf, 128);
  77. if (! strcmp(buf, p->result)) return 1;
  78. printf("Test number %d failed: result = %s, should be %s\n", testno, buf, p->result);
  79. return 0;
  80. }