bytevector-check.scm 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Harald Glab-Plhak, Mike Sperber
  3. ; These are the examples from the R6RS document.
  4. (define-test-suite basic-bytevectors-tests)
  5. (define-test-suite ieee-bytevectors-tests)
  6. (define-test-suite string-bytevectors-tests)
  7. (define-test-suite r6rs-bytevectors-tests
  8. (basic-bytevectors-tests ieee-bytevectors-tests string-bytevectors-tests))
  9. (define-test-case endian/simple-bytevect basic-bytevectors-tests
  10. (check (endianness big) => (endianness big))
  11. (check (endianness little) => (endianness little))
  12. (check (or (eq? (native-endianness) (endianness big))
  13. (eq? (native-endianness) (endianness little))) => #t)
  14. (check (bytevector? (vector)) => #f)
  15. (check (bytevector? (make-bytevector 3)) => #t)
  16. (check (bytevector-length (make-bytevector 44)) => 44)
  17. (check (let ((b1 (make-bytevector 16 -127))
  18. (b2 (make-bytevector 16 255)))
  19. (list
  20. (bytevector-s8-ref b1 0)
  21. (bytevector-u8-ref b1 0)
  22. (bytevector-s8-ref b2 0)
  23. (bytevector-u8-ref b2 0))) => '(-127 129 -1 255))
  24. (check (let ((b (make-bytevector 16 -127)))
  25. (bytevector-s8-set! b 0 -126)
  26. (bytevector-u8-set! b 1 246)
  27. (list
  28. (bytevector-s8-ref b 0)
  29. (bytevector-u8-ref b 0)
  30. (bytevector-s8-ref b 1)
  31. (bytevector-u8-ref b 1))) => '(-126 130 -10 246))
  32. (let ((b (make-bytevector 16 -127)))
  33. (bytevector-uint-set! b 0 (- (expt 2 128) 3) (endianness little) 16)
  34. (check (bytevector-uint-ref b 0 (endianness little) 16)
  35. => #xfffffffffffffffffffffffffffffffd)
  36. (check (bytevector-sint-ref b 0 (endianness little) 16) => -3)
  37. (check (bytevector->u8-list b)
  38. => '(253 255 255 255 255 255 255 255
  39. 255 255 255 255 255 255 255 255))
  40. (bytevector-uint-set! b 0 (- (expt 2 128) 3) (endianness big) 16)
  41. (check (bytevector-uint-ref b 0 (endianness big) 16)
  42. => #xfffffffffffffffffffffffffffffffd)
  43. (check (bytevector-sint-ref b 0 (endianness big) 16) => -3)
  44. (check (bytevector->u8-list b)
  45. => '(255 255 255 255 255 255 255 255
  46. 255 255 255 255 255 255 255 253))))
  47. (define-test-case int16/int32/int64/to-list-revert basic-bytevectors-tests
  48. (let ((b (u8-list->bytevector
  49. '(255 255 255 255 255 255 255 255
  50. 255 255 255 255 255 255 255 253))))
  51. (check (bytevector-u16-ref b 14 (endianness little)) => 65023)
  52. (check (bytevector-s16-ref b 14 (endianness little)) => -513)
  53. (check (bytevector-u16-ref b 14 (endianness big)) => 65533)
  54. (check (bytevector-s16-ref b 14 (endianness big)) => -3)
  55. (bytevector-u16-set! b 0 12345 (endianness little))
  56. (check (bytevector-u16-ref b 0 (endianness little)) => 12345)
  57. (bytevector-u16-native-set! b 0 12345)
  58. (check (bytevector-u16-native-ref b 0) => 12345))
  59. (let ((b (u8-list->bytevector
  60. '(255 255 255 255 255 255 255 255
  61. 255 255 255 255 255 255 255 253))))
  62. (check (bytevector-u32-ref b 12 (endianness little)) => 4261412863)
  63. (check (bytevector-s32-ref b 12 (endianness little)) => -33554433)
  64. (check (bytevector-u32-ref b 12 (endianness big)) => 4294967293)
  65. (check (bytevector-s32-ref b 12 (endianness big)) => -3))
  66. (let ((b (u8-list->bytevector
  67. '(255 255 255 255 255 255 255 255
  68. 255 255 255 255 255 255 255 253))))
  69. (check (bytevector-u64-ref b 8 (endianness little))
  70. => 18302628885633695743)
  71. (check (bytevector-s64-ref b 8 (endianness little))
  72. => -144115188075855873)
  73. (check (bytevector-u64-ref b 8 (endianness big))
  74. => 18446744073709551613)
  75. (check (bytevector-s64-ref b 8 (endianness big)) => -3))
  76. (let (( b1 (u8-list->bytevector '(255 2 254 3 255)))
  77. (b2 (u8-list->bytevector '(255 3 254 2 255)))
  78. (b3 (u8-list->bytevector '(255 3 254 2 255)))
  79. (b4 (u8-list->bytevector '(255 3 255))))
  80. (check (bytevector=? b1 b2) => #f)
  81. (check (bytevector=? b2 b3) => #t)
  82. (check (bytevector=? b3 b4) => #f)
  83. (check (bytevector=? b4 b3) => #f)))
  84. (define-test-case ieee-vect/fill/copy basic-bytevectors-tests
  85. (let ((b (u8-list->bytevector
  86. '(63 240 0 0 0 0 0 0))))
  87. (check (bytevector-ieee-single-ref b 4 (endianness little)) => 0.0)
  88. (check (bytevector-ieee-double-ref b 0 (endianness big)) => 1.0)
  89. (bytevector-ieee-single-native-set! b 4 3.0)
  90. (check (bytevector-ieee-single-native-ref b 4) => 3.0)
  91. (bytevector-ieee-double-native-set! b 0 5.0)
  92. (check (bytevector-ieee-double-native-ref b 0) => 5.0)
  93. (bytevector-ieee-double-set! b 0 1.75 (endianness big))
  94. (check (bytevector->u8-list b) => '(63 252 0 0 0 0 0 0)))
  95. (let ((b (make-bytevector 7 12)))
  96. (bytevector-fill! b 127)
  97. (check (bytevector->u8-list b) => '(127 127 127 127 127 127 127)))
  98. (let ((b (u8-list->bytevector '(1 2 3 4 5 6 7 8))))
  99. (bytevector-copy! b 0 b 3 4)
  100. (check (bytevector->u8-list b) => '(1 2 3 1 2 3 4 8))
  101. (check (bytevector=? b (bytevector-copy b)) => #t))
  102. (let ((b (u8-list->bytevector '(1 2 3 255 1 2 1 2))))
  103. (check (bytevector->sint-list b (endianness little) 2)
  104. => '(513 -253 513 513))
  105. (check (bytevector->uint-list b (endianness little) 2)
  106. => '(513 65283 513 513))))