[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet-scheme] 02/49: bv-slice: Support signed integers.
From: |
gnunet |
Subject: |
[gnunet-scheme] 02/49: bv-slice: Support signed integers. |
Date: |
Sat, 25 Dec 2021 22:59:39 +0100 |
This is an automated email from the git hooks/post-receive script.
maxime-devos pushed a commit to branch master
in repository gnunet-scheme.
commit c53f0c9634e0beb39307ae87ae029c1cddd44ba9
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Wed Sep 15 22:38:46 2021 +0200
bv-slice: Support signed integers.
* gnu/gnunet/utils/bv-slice.scm
(slice-s8-ref,slice-s16-ref,slice-s32-ref,slice-s64-ref)
(slice-s8-set!,slice-s16-set!,slice-s32-set!,slice-s64-set!):
New procedures.
* tests/bv-slice.scm
(some-numbers): New procedure.
(sizes/u,sizes/s): New variables.
("slice-uN-ref/set! rount-trips"): New tests.
("slice-sN-ref/set! rount-trips"): New tests.
("two's complement is used"): New test.
---
gnu/gnunet/utils/bv-slice.scm | 31 +++++++++++++++++++++++++--
tests/bv-slice.scm | 50 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+), 2 deletions(-)
diff --git a/gnu/gnunet/utils/bv-slice.scm b/gnu/gnunet/utils/bv-slice.scm
index 6fc9d0d..1e37ba1 100644
--- a/gnu/gnunet/utils/bv-slice.scm
+++ b/gnu/gnunet/utils/bv-slice.scm
@@ -44,6 +44,14 @@
slice-u16-set!
slice-u32-set!
slice-u64-set!
+ slice-s8-ref
+ slice-s16-ref
+ slice-s32-ref
+ slice-s64-ref
+ slice-s8-set!
+ slice-s16-set!
+ slice-s32-set!
+ slice-s64-set!
slice-ieee-double-ref
slice-ieee-double-set!
;; Large operations
@@ -209,8 +217,15 @@ the bytevector in place."
(wrap-rnrs-ref bytevector-u32-ref slice-readable? 4))
(define slice-u64-ref
(wrap-rnrs-ref bytevector-u64-ref slice-readable? 8))
- (define slice-ieee-double-ref
- (wrap-rnrs-ref bytevector-ieee-double-ref slice-readable? 8))
+
+ (define slice-s8-ref
+ (wrap-rnrs-ref bytevector-s8-ref slice-readable? 1))
+ (define slice-s16-ref
+ (wrap-rnrs-ref bytevector-s16-ref slice-readable? 2))
+ (define slice-s32-ref
+ (wrap-rnrs-ref bytevector-s32-ref slice-readable? 4))
+ (define slice-s64-ref
+ (wrap-rnrs-ref bytevector-s64-ref slice-readable? 8))
(define slice-u8-set!
(wrap-rnrs-ref bytevector-u8-set! slice-writable? 1))
@@ -220,6 +235,18 @@ the bytevector in place."
(wrap-rnrs-ref bytevector-u32-set! slice-writable? 4))
(define slice-u64-set!
(wrap-rnrs-ref bytevector-u64-set! slice-writable? 8))
+
+ (define slice-s8-set!
+ (wrap-rnrs-ref bytevector-s8-set! slice-writable? 1))
+ (define slice-s16-set!
+ (wrap-rnrs-ref bytevector-s16-set! slice-writable? 2))
+ (define slice-s32-set!
+ (wrap-rnrs-ref bytevector-s32-set! slice-writable? 4))
+ (define slice-s64-set!
+ (wrap-rnrs-ref bytevector-s64-set! slice-writable? 8))
+
+ (define slice-ieee-double-ref
+ (wrap-rnrs-ref bytevector-ieee-double-ref slice-readable? 8))
(define slice-ieee-double-set!
(wrap-rnrs-ref bytevector-ieee-double-set! slice-writable? 8))
diff --git a/tests/bv-slice.scm b/tests/bv-slice.scm
index 516f9db..3e63f0f 100644
--- a/tests/bv-slice.scm
+++ b/tests/bv-slice.scm
@@ -18,6 +18,7 @@
(import (gnu gnunet utils bv-slice)
(srfi srfi-26)
+ (ice-9 match)
(rnrs conditions)
(rnrs bytevectors))
@@ -89,6 +90,55 @@
&assertion
(slice-zero! (slice/write-only (make-slice/read-write 0))))
+(define (some-numbers N)
+ (map (cut expt 2 <>) (iota N)))
+(define sizes/u `(#(16 ,slice-u16-ref ,slice-u16-set!)
+ #(32 ,slice-u32-ref ,slice-u32-set!)
+ #(64 ,slice-u64-ref ,slice-u64-set!)))
+(define sizes/s `(#(16 ,slice-s16-ref ,slice-s16-set!)
+ #(32 ,slice-s32-ref ,slice-s32-set!)
+ #(64 ,slice-s64-ref ,slice-s64-set!)))
+
+(for-each
+ (match-lambda
+ (#(bits ref set!)
+ (test-equal
+ (string-append "slice-u" (number->string bits) "-ref/set! round-trips")
+ (some-numbers bits)
+ (map (lambda (number)
+ ;; #xde: filler that should be unused
+ (define bv (make-bytevector (/ bits 8) #xde))
+ (define sl (bv-slice/read-write bv))
+ (set! sl 0 number (endianness little))
+ (ref sl 0 (endianness little)))
+ (some-numbers bits)))))
+ sizes/u)
+
+(for-each
+ (match-lambda
+ (#(bits ref set!)
+ (test-equal
+ (string-append "slice-s" (number->string bits) "-ref/set! round-trips")
+ (append (map - (some-numbers bits))
+ ;; -1: avoid the sign bit
+ (some-numbers (- bits 1)))
+ (map (lambda (number)
+ ;; #xde: filler that should be unused
+ (define bv (make-bytevector (/ bits 8) #xde))
+ (define sl (bv-slice/read-write bv))
+ (set! sl 0 number (endianness little))
+ (ref sl 0 (endianness little)))
+ (append (map - (some-numbers bits))
+ (some-numbers (- bits 1)))))))
+ sizes/s)
+
+;; Signed integer representations are used in some network messages,
+;; so make sure they will be interpreted the same no matter the
+;; architecture.
+(test-equal "two's complement is used"
+ -128
+ (slice-s8-ref (bv-slice/read-write #vu8(#b10000000)) 0))
+
(test-end "bv-slice")
;; ^ TODO: test other procedures
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet-scheme] branch master updated (6c136b9 -> 5c7bf08), gnunet, 2021/12/25
- [gnunet-scheme] 04/49: dht/struct: New module., gnunet, 2021/12/25
- [gnunet-scheme] 01/49: Rename messge type 156., gnunet, 2021/12/25
- [gnunet-scheme] 06/49: dht/client: Implement message verifiers., gnunet, 2021/12/25
- [gnunet-scheme] 02/49: bv-slice: Support signed integers.,
gnunet <=
- [gnunet-scheme] 05/49: Define block types., gnunet, 2021/12/25
- [gnunet-scheme] 03/49: netstruct/procedural: Support signed integers., gnunet, 2021/12/25
- [gnunet-scheme] 08/49: examples: Consider extending the web interface with other services., gnunet, 2021/12/25
- [gnunet-scheme] 07/49: dht/client: Implement reconnecting., gnunet, 2021/12/25
- [gnunet-scheme] 09/49: examples/web: Connect to the DHT service., gnunet, 2021/12/25
- [gnunet-scheme] 10/49: dht/client: Register new get operations for processing., gnunet, 2021/12/25
- [gnunet-scheme] 12/49: dht/client: Send messages for new get operations., gnunet, 2021/12/25
- [gnunet-scheme] 13/49: dht/client: Send PUT messages., gnunet, 2021/12/25
- [gnunet-scheme] 24/49: examples/web: Put different information on separate pages., gnunet, 2021/12/25
- [gnunet-scheme] 20/49: dht/client: Call the callback on the client result., gnunet, 2021/12/25