gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet-scheme] 01/04: tests/distributed-hash-table: Test 'copy-datum'.


From: gnunet
Subject: [gnunet-scheme] 01/04: tests/distributed-hash-table: Test 'copy-datum'.
Date: Tue, 18 Jan 2022 11:26:37 +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 f130202fa73c80706e438fca4abd1918ad74cd44
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Tue Jan 18 08:56:51 2022 +0000

    tests/distributed-hash-table: Test 'copy-datum'.
    
    * tests/distributed-hash-table.scm
      (make-a-datum): Add 'expiration' argument.
      (slice->bytevector,datum->sexp,datum=?,slice-independent?)
      (datum-independent?): New procedures.
      ("copy-datum: equal and independent"): New test.
---
 tests/distributed-hash-table.scm | 41 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)

diff --git a/tests/distributed-hash-table.scm b/tests/distributed-hash-table.scm
index c80abc4..b85e2f7 100644
--- a/tests/distributed-hash-table.scm
+++ b/tests/distributed-hash-table.scm
@@ -26,6 +26,7 @@
        (rnrs exceptions)
        (rnrs conditions)
        (rnrs base)
+       (rnrs bytevectors)
        (srfi srfi-26)
        (srfi srfi-64))
 
@@ -104,8 +105,9 @@
 (define* (make-a-datum #:key
                       (type 0)
                       (key (make-slice/read-write (sizeof /hashcode:512 '())))
-                      (value (make-slice/read-write 0)))
-  (make-datum type key value))
+                      (value (make-slice/read-write 0))
+                      (expiration 0))
+  (make-datum type key value #:expiration expiration))
 (test-assert "datum?"
   (datum? (make-a-datum)))
 (test-equal "not a datum"
@@ -196,4 +198,39 @@
 ;; This detected a bug!
 (test-error "datum-type, wrong type (2)" (make-a-datum #:type 1.0))
 
+(define (slice->bytevector s)
+  (define b (make-bytevector (slice-length s)))
+  (define s2 (bv-slice/read-write b))
+  (slice-copy! s s2)
+  b)
+
+(define (datum->sexp z)
+   (list (datum-type z)
+        (slice->bytevector (datum-key z))
+        (slice->bytevector (datum-value z))
+        (datum-expiration z)))
+
+(define (datum=? x y)
+  (equal? (datum->sexp x) (datum->sexp y)))
+
+(define (slice-independent? x y)
+  (not (eq? (slice-bv x) (slice-bv y))))
+
+(define (datum-independent? x y)
+  (and (slice-independent? (datum-key x) (datum-key y))
+       (slice-independent? (datum-value x) (datum-value y))))
+
+(test-assert "copy-datum: equal and independent"
+  ;; A least in Guile 3.0.5, all bytevectors of length 0 are eq?,
+  ;; so let the value be non-empty such that datum-independent?
+  ;; can return #true.
+  (let* ((old-key (make-slice/read-write (sizeof /hashcode:512 '())))
+        (old-value (make-slice/read-write 70))
+        (old (make-a-datum #:value old-value #:expiration 777)))
+    (slice-u32-set! old-key 9 #xcabba9e (endianness big))
+    (slice-u32-set! old-value 5 #xcabba9e (endianness big))
+    (let ((new (copy-datum old)))
+      (and (datum=? old new)
+          (datum-independent? old new)))))
+
 (test-end)

-- 
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]