gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]