bytevector-ieee-check.scm 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. ; Adapted from the R6RS reference implementation by Harald Glab-Phlak, which is:
  2. ; Copyright 2007 William D Clinger.
  3. ; Permission to copy this software, in whole or in part, to use this
  4. ; software for any lawful purpose, and to redistribute this software
  5. ; is granted subject to the restriction that all copies made of this
  6. ; software must include this copyright notice in full.
  7. ;
  8. ; I also request that you send me a copy of any improvements that you
  9. ; make to this software so that they may be incorporated within it to
  10. ; the benefit of the Scheme community.
  11. (define-test-case ieee/heavy-test ieee-bytevectors-tests
  12. (letrec ((roundtrip
  13. (lambda (x getter setter! k endness)
  14. (let ((b (make-bytevector 400)))
  15. (setter! b k x endness)
  16. (check (getter b k endness) => x)))))
  17. (roundtrip
  18. +inf.0
  19. bytevector-ieee-single-ref bytevector-ieee-single-set! 0 (endianness big))
  20. (roundtrip
  21. -inf.0
  22. bytevector-ieee-single-ref bytevector-ieee-single-set! 0 (endianness big))
  23. (roundtrip
  24. 1e10
  25. bytevector-ieee-single-ref bytevector-ieee-single-set! 0 (endianness little))
  26. (roundtrip
  27. -0.2822580337524414
  28. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness big))
  29. (roundtrip
  30. 1e10
  31. bytevector-ieee-single-ref bytevector-ieee-single-set! 0 (endianness big))
  32. (roundtrip
  33. +inf.0
  34. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness big))
  35. (roundtrip
  36. -inf.0
  37. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness big))
  38. (roundtrip
  39. 1e10
  40. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness big))
  41. (roundtrip
  42. -0.2822580337524414
  43. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness big))
  44. (roundtrip
  45. +inf.0
  46. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness little))
  47. (roundtrip
  48. -inf.0
  49. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness little))
  50. (roundtrip
  51. 1e10
  52. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness little))
  53. (roundtrip
  54. -0.2822580337524414
  55. bytevector-ieee-single-ref bytevector-ieee-single-set! 1 (endianness little))
  56. (roundtrip
  57. +inf.0
  58. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness big))
  59. (roundtrip
  60. -inf.0
  61. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness big))
  62. (roundtrip
  63. 1e10
  64. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness big))
  65. (roundtrip
  66. -0.2822580337524414
  67. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness big))
  68. (roundtrip
  69. +inf.0
  70. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness little))
  71. (roundtrip
  72. -inf.0
  73. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness little))
  74. (roundtrip
  75. 1e10
  76. bytevector-ieee-single-ref bytevector-ieee-single-set! 2 (endianness little))
  77. ;; Double precision, offset 0, big-endian
  78. (roundtrip
  79. +inf.0
  80. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness big))
  81. (roundtrip
  82. -inf.0
  83. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness big))
  84. (roundtrip
  85. 1e10
  86. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness big))
  87. (roundtrip
  88. -0.2822580337524414
  89. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness big))
  90. ;; Double precision, offset 0, little-endian
  91. (roundtrip
  92. +inf.0
  93. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness little))
  94. (roundtrip
  95. -inf.0
  96. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness little))
  97. (roundtrip
  98. 1e10
  99. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness little))
  100. (roundtrip
  101. -0.2822580337524414
  102. bytevector-ieee-double-ref bytevector-ieee-double-set! 0 (endianness little))
  103. ;; Double precision, offset 1, big-endian
  104. (roundtrip
  105. +inf.0
  106. bytevector-ieee-double-ref bytevector-ieee-double-set! 1 (endianness big))
  107. (roundtrip
  108. -inf.0
  109. bytevector-ieee-double-ref bytevector-ieee-double-set! 1 (endianness big))
  110. (roundtrip
  111. 1e10
  112. bytevector-ieee-double-ref bytevector-ieee-double-set! 1 (endianness big))
  113. (roundtrip
  114. -0.2822580337524414
  115. bytevector-ieee-double-ref bytevector-ieee-double-set! 1 (endianness big))
  116. ;; Double precision, offset 1, little-endian
  117. (roundtrip
  118. +inf.0
  119. bytevector-ieee-double-ref bytevector-ieee-double-set! 1 (endianness little))
  120. (roundtrip
  121. -inf.0
  122. bytevector-ieee-double-ref bytevector-ieee-double-set! 1 (endianness little))
  123. (roundtrip
  124. -0.2822580337524414
  125. bytevector-ieee-double-ref bytevector-ieee-double-set! 2 (endianness big))
  126. ;; Double precision, offset 2, little-endian
  127. (roundtrip
  128. +inf.0
  129. bytevector-ieee-double-ref bytevector-ieee-double-set! 2 (endianness little))
  130. (roundtrip
  131. -inf.0
  132. bytevector-ieee-double-ref bytevector-ieee-double-set! 2 (endianness little))
  133. (roundtrip
  134. 1e10
  135. bytevector-ieee-double-ref bytevector-ieee-double-set! 2 (endianness little))
  136. (roundtrip
  137. -0.2822580337524414
  138. bytevector-ieee-double-ref bytevector-ieee-double-set! 2 (endianness little))
  139. ;; Double precision, offset 3, big-endian
  140. (roundtrip
  141. +inf.0
  142. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness big))
  143. (roundtrip
  144. -inf.0
  145. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness big))
  146. (roundtrip
  147. 1e10
  148. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness big))
  149. (roundtrip
  150. -0.2822580337524414
  151. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness big))
  152. ;; Double precision, offset 3, little-endian
  153. (roundtrip
  154. +inf.0
  155. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness little))
  156. (roundtrip
  157. -inf.0
  158. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness little))
  159. (roundtrip
  160. 1e10
  161. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness little))
  162. (roundtrip
  163. -0.2822580337524414
  164. bytevector-ieee-double-ref bytevector-ieee-double-set! 3 (endianness little))))