diff options
author | Eric Bavier <bavier@member.fsf.org> | 2014-07-20 11:22:46 -0500 |
---|---|---|
committer | Eric Bavier <bavier@member.fsf.org> | 2014-07-20 11:36:09 -0500 |
commit | 516e3b6f7a57f6b6f378c9174f8c5ffc990df7db (patch) | |
tree | 783ba2c086bb4128022732912e7af7963a56506e /tests | |
parent | da891830dac44e531d21c6b3d3b76a14577a8de9 (diff) | |
download | gnu-guix-516e3b6f7a57f6b6f378c9174f8c5ffc990df7db.tar gnu-guix-516e3b6f7a57f6b6f378c9174f8c5ffc990df7db.tar.gz |
guix: utils: Add fold-tree and fold-tree-leaves.
* guix/utils.scm (fold-tree, fold-tree-leaves): New functions.
* tests/utils.scm: Add tests for them.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/utils.scm | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/tests/utils.scm b/tests/utils.scm index 8ad399f75c..611867ca09 100644 --- a/tests/utils.scm +++ b/tests/utils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,7 +26,8 @@ #:use-module (srfi srfi-64) #:use-module (rnrs bytevectors) #:use-module (rnrs io ports) - #:use-module (ice-9 match)) + #:use-module (ice-9 match) + #:use-module (ice-9 vlist)) (define temp-file (string-append "t-utils-" (number->string (getpid)))) @@ -118,6 +120,37 @@ '(0 1 2 3))) list)) +(let* ((tree (alist->vhash + '((0 2 3) (1 3 4) (2) (3 5 6) (4 6) (5) (6)) + hashq)) + (add-one (lambda (_ r) (1+ r))) + (tree-lookup (lambda (n) (cdr (vhash-assq n tree))))) + (test-equal "fold-tree, single root" + 5 (fold-tree add-one 0 tree-lookup '(0))) + (test-equal "fold-tree, two roots" + 7 (fold-tree add-one 0 tree-lookup '(0 1))) + (test-equal "fold-tree, sum" + 16 (fold-tree + 0 tree-lookup '(0))) + (test-equal "fold-tree, internal" + 18 (fold-tree + 0 tree-lookup '(3 4))) + (test-equal "fold-tree, cons" + '(1 3 4 5 6) + (sort (fold-tree cons '() tree-lookup '(1)) <)) + (test-equal "fold-tree, overlapping paths" + '(1 3 4 5 6) + (sort (fold-tree cons '() tree-lookup '(1 4)) <)) + (test-equal "fold-tree, cons, two roots" + '(0 2 3 4 5 6) + (sort (fold-tree cons '() tree-lookup '(0 4)) <)) + (test-equal "fold-tree-leaves, single root" + 2 (fold-tree-leaves add-one 0 tree-lookup '(1))) + (test-equal "fold-tree-leaves, single root, sum" + 11 (fold-tree-leaves + 0 tree-lookup '(1))) + (test-equal "fold-tree-leaves, two roots" + 3 (fold-tree-leaves add-one 0 tree-lookup '(0 1))) + (test-equal "fold-tree-leaves, two roots, sum" + 13 (fold-tree-leaves + 0 tree-lookup '(0 1)))) + (test-assert "filtered-port, file" (let* ((file (search-path %load-path "guix.scm")) (input (open-file file "r0b"))) |