gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet-scheme] 02/04: tests/distributed-hash-table: Test 'search-result


From: gnunet
Subject: [gnunet-scheme] 02/04: tests/distributed-hash-table: Test 'search-result'.
Date: Fri, 21 Jan 2022 14:45:30 +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 c98d3467edfb4d5050ba0b2f3630227553190178
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Tue Jan 18 11:41:47 2022 +0000

    tests/distributed-hash-table: Test 'search-result'.
    
    * tests/distributed-hash-table.scm (datum-key-test, datum-value-test):
      Extract some functionality to ...
      (slice-property-test): ... this procedure.
      (search-result-get-path-slice-test,search-result-put-path-slice-test):
      New macros.
      ("search-result-get-path, slice", "search-result-get-path, empty")
      ("search-result-put-path, slice", "search-result-put-path, empty")
      ("search-result-get-path, none", "search-result-put-path, none"):
      New tests.
---
 tests/distributed-hash-table.scm | 68 +++++++++++++++++++++++++++++-----------
 1 file changed, 49 insertions(+), 19 deletions(-)

diff --git a/tests/distributed-hash-table.scm b/tests/distributed-hash-table.scm
index 6bf808c..54569fc 100644
--- a/tests/distributed-hash-table.scm
+++ b/tests/distributed-hash-table.scm
@@ -115,27 +115,28 @@
   (map datum? (list #false 'symbol (make-slice/read-write 0))))
 
 ;; For efficiency reasons, make sure the storage is reused.
-(define-syntax-rule (datum-key-test test-case k)
-  (test-assert test-case
-    (let* ((key k) ; only evaluate once, because eq? will be required
-          (datum (make-a-datum #:key key))
-          (new-key (datum-key datum)))
-      (and (datum? datum)
-          (slice-readable? new-key)
-          (not (slice-writable? new-key))
-          (eq? (slice-bv key) (slice-bv new-key))
-          (= (slice-length key) (slice-length new-key))))))
-(define-syntax-rule (datum-value-test test-case v)
+;;
+;; This verifies constructing a record and extracting a field from the record
+;; end ups with the value passed to the constructor, as a readable bytevector
+;; slice -- the writability of the original slice, if any, is removed.
+(define (slice-property-test test-case generate-slice stuff? slice->stuff 
stuff-slice)
   (test-assert test-case
-    (let* ((value v) ; only evaluate once, because eq? will be required
-          (datum (make-a-datum #:value value))
-          (new-value (datum-value datum)))
-      (and (datum? datum)
-          (slice-readable? new-value)
-          (not (slice-writable? new-value))
-          (eq? (slice-bv value) (slice-bv new-value))
-          (= (slice-length value) (slice-length new-value))))))
+    ;; only evaluate once, because eq? will be required
+    (let* ((slice (generate-slice))
+          (stuff (slice->stuff slice))
+          (new-slice (stuff-slice stuff)))
+      (and (stuff? stuff)
+          (slice-readable? new-slice)
+          (not (slice-writable? new-slice))
+          (eq? (slice-bv slice) (slice-bv new-slice))
+          (= (slice-length slice) (slice-length new-slice))))))
 
+(define-syntax-rule (datum-key-test test-case k)
+  (slice-property-test test-case (lambda () k) datum?
+                      (lambda (s) (make-a-datum #:key s)) datum-key))
+(define-syntax-rule (datum-value-test test-case v)
+  (slice-property-test test-case (lambda () v) datum?
+                      (lambda (s) (make-a-datum #:value s)) datum-value))
 (define-syntax-rule (datum-type-test test-case type type/integer)
   (test-equal test-case
     type/integer
@@ -265,4 +266,33 @@
       (and (search-result=? old new)
           (search-result-independent? old new)))))
 
+(define-syntax-rule (search-result-get-path-slice-test test-case k)
+  (slice-property-test test-case (lambda () k) search-result?
+                      (lambda (s) (datum->search-result (make-a-datum)
+                                                        #:get-path s))
+                      search-result-get-path))
+(define-syntax-rule (search-result-put-path-slice-test test-case k)
+  (slice-property-test test-case (lambda () k) search-result?
+                      (lambda (s) (datum->search-result (make-a-datum)
+                                                        #:put-path s))
+                      search-result-put-path))
+
+;; These detected a bug: the capabilities were not restricted!
+;; TODO: length
+;; TODO: can there be a get path without a put path?
+(search-result-get-path-slice-test "search-result-get-path, slice"
+                                  (make-slice/read-write 7))
+(search-result-get-path-slice-test "search-result-get-path, empty"
+                                  (make-slice/read-write 0))
+(search-result-put-path-slice-test "search-result-put-path, slice"
+                                  (make-slice/read-write 7))
+(search-result-put-path-slice-test "search-result-put-path, empty"
+                                  (make-slice/read-write 0))
+(test-equal "search-result-get-path, none"
+  (list #false) ; TODO: drop 'list' when SRFI-64 bug is fixed
+  (list (search-result-get-path (datum->search-result (make-a-datum)))))
+(test-equal "search-result-put-path, none"
+  (list #false) ; TODO: drop 'list' when SRFI-64 bug is fixed
+  (list (search-result-put-path (datum->search-result (make-a-datum)))))
+
 (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]