tlenientops.nim 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. discard """
  2. exitcode: 0
  3. output: ""
  4. """
  5. import lenientops
  6. proc `~=`[T](a, b: T): bool = abs(a - b) < 1e-7
  7. block: # math binary operators
  8. let i = 1
  9. let f = 2.0
  10. doAssert i + f ~= 3
  11. doAssert f + i ~= 3
  12. doAssert i - f ~= -1
  13. doAssert f - i ~= 1
  14. doAssert i * f ~= 2
  15. doAssert f * i ~= 2
  16. doAssert i / f ~= 0.5
  17. doAssert f / i ~= 2
  18. block: # comparison operators
  19. doAssert 1.int < 2.float
  20. doAssert 1.float < 2.int
  21. doAssert 1.int <= 2.float
  22. doAssert 1.float <= 2.int
  23. doAssert 2.int >= 1.float
  24. doAssert 2.float >= 1.int
  25. doAssert 2.int > 1.float
  26. doAssert 2.float > 1.int
  27. block: # all type combinations
  28. let i = 1
  29. let f = 2.0
  30. doAssert i.int + f.float ~= 3
  31. doAssert i.int + f.float32 ~= 3
  32. doAssert i.int + f.float64 ~= 3
  33. doAssert i.int8 + f.float ~= 3
  34. doAssert i.int8 + f.float32 ~= 3
  35. doAssert i.int8 + f.float64 ~= 3
  36. doAssert i.int16 + f.float ~= 3
  37. doAssert i.int16 + f.float32 ~= 3
  38. doAssert i.int16 + f.float64 ~= 3
  39. doAssert i.int32 + f.float ~= 3
  40. doAssert i.int32 + f.float32 ~= 3
  41. doAssert i.int32 + f.float64 ~= 3
  42. doAssert i.int64 + f.float ~= 3
  43. doAssert i.int64 + f.float32 ~= 3
  44. doAssert i.int64 + f.float64 ~= 3
  45. doAssert i.uint + f.float ~= 3
  46. doAssert i.uint + f.float32 ~= 3
  47. doAssert i.uint + f.float64 ~= 3
  48. doAssert i.uint8 + f.float ~= 3
  49. doAssert i.uint8 + f.float32 ~= 3
  50. doAssert i.uint8 + f.float64 ~= 3
  51. doAssert i.uint16 + f.float ~= 3
  52. doAssert i.uint16 + f.float32 ~= 3
  53. doAssert i.uint16 + f.float64 ~= 3
  54. doAssert i.uint32 + f.float ~= 3
  55. doAssert i.uint32 + f.float32 ~= 3
  56. doAssert i.uint32 + f.float64 ~= 3
  57. doAssert i.uint64 + f.float ~= 3
  58. doAssert i.uint64 + f.float32 ~= 3
  59. doAssert i.uint64 + f.float64 ~= 3
  60. doAssert f.float + i.int ~= 3
  61. doAssert f.float32 + i.int ~= 3
  62. doAssert f.float64 + i.int ~= 3
  63. doAssert f.float + i.int8 ~= 3
  64. doAssert f.float32 + i.int8 ~= 3
  65. doAssert f.float64 + i.int8 ~= 3
  66. doAssert f.float + i.int16 ~= 3
  67. doAssert f.float32 + i.int16 ~= 3
  68. doAssert f.float64 + i.int16 ~= 3
  69. doAssert f.float + i.int32 ~= 3
  70. doAssert f.float32 + i.int32 ~= 3
  71. doAssert f.float64 + i.int32 ~= 3
  72. doAssert f.float + i.int64 ~= 3
  73. doAssert f.float32 + i.int64 ~= 3
  74. doAssert f.float64 + i.int64 ~= 3
  75. doAssert f.float + i.uint ~= 3
  76. doAssert f.float32 + i.uint ~= 3
  77. doAssert f.float64 + i.uint ~= 3
  78. doAssert f.float + i.uint8 ~= 3
  79. doAssert f.float32 + i.uint8 ~= 3
  80. doAssert f.float64 + i.uint8 ~= 3
  81. doAssert f.float + i.uint16 ~= 3
  82. doAssert f.float32 + i.uint16 ~= 3
  83. doAssert f.float64 + i.uint16 ~= 3
  84. doAssert f.float + i.uint32 ~= 3
  85. doAssert f.float32 + i.uint32 ~= 3
  86. doAssert f.float64 + i.uint32 ~= 3
  87. doAssert f.float + i.uint64 ~= 3
  88. doAssert f.float32 + i.uint64 ~= 3
  89. doAssert f.float64 + i.uint64 ~= 3