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