aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (test-combinators)
  #:use-module (guix combinators)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-64)
  #:use-module (ice-9 vlist))

(test-begin "combinators")

(test-equal "fold2, 1 list"
    (list (reverse (iota 5))
          (map - (reverse (iota 5))))
  (call-with-values
      (lambda ()
        (fold2 (lambda (i r1 r2)
                 (values (cons i r1)
                         (cons (- i) r2)))
               '() '()
               (iota 5)))
    list))

(test-equal "fold2, 2 lists"
    (list (reverse '((a . 0) (b . 1) (c . 2) (d . 3)))
          (reverse '((a . 0) (b . -1) (c . -2) (d . -3))))
  (call-with-values
      (lambda ()
        (fold2 (lambda (k v r1 r2)
                 (values (alist-cons k v r1)
                         (alist-cons k (- v) r2)))
               '() '()
               '(a b c d)
               '(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-end)

/tr> 2022-08-05disarchive-manifest: Filter out origins without a hash....* etc/disarchive-manifest.scm (disarchive-collection): Filter out origins with a phony hash. Ludovic Courtès 2022-08-05disarchive-manifest: Handle tar.xz archives....* etc/disarchive-manifest.scm (tarball-origin?): Add ".tar.xz". Ludovic Courtès 2022-07-13etc: teams: Add entry for Jonathan Brielmaier....* etc/teams.scm.in ("Jonathan Brielmaier"): New member. Jonathan Brielmaier 2022-07-13etc: teams: Add mozilla team....* etc/teams.scm.in (mozilla): New team. Jonathan Brielmaier 2022-07-10etc: teams: Add entry for Thiago Jung Bauermann....* etc/teams.scm.in ("Thiago Jung Bauermann"): New member. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Thiago Jung Bauermann 2022-07-10time-travel-manifest: Use a separate Git checkout cache....* etc/time-travel-manifest.scm (guix-instance-compiler): Parameterize %REPOSITORY-CACHE-DIRECTORY. Ludovic Courtès 2022-07-10monads: Add 'mparameterize'....* etc/system-tests.scm (mparameterize): Move to... * guix/monads.scm (mparameterize): ... here. * tests/monads.scm ("mparameterize"): New test. * .dir-locals.el (c-mode): Add it. Ludovic Courtès 2022-07-08etc: teams: Add entry for Christopher Baines....* etc/teams.scm.in ("Christopher Baines"): New member. Christopher Baines 2022-07-08etc: Add 'time-travel-manifest.scm'....This manifest makes it easy to test travels from the current revision back to the revision of a past Guix release. Suggested by zimoun <zimon.toutoune@gmail.com>. * etc/time-travel-manifest.scm: New file. * Makefile.am (EXTRA_DIST): Add it. Ludovic Courtès 2022-07-08etc: teams: Add entry for Björn Höfling....* etc/teams.scm.in ("Björn Höfling"): New member. Björn Höfling 2022-07-07etc: teams: Add entry for jgart....* etc/teams.scm.in ("jgart"): New member. Signed-off-by: Lars-Dominik Braun <lars@6xq.net> jgart via Guix-patches via 2022-07-07etc: teams: Add entry for Lars-Dominik Braun....* etc/teams.scm.in ("Lars-Dominik Braun"): New member. Lars-Dominik Braun 2022-07-07etc: teams: Add entry for Florian Pelz....* etc/teams.scm.in ("Florian Pelz"): New member. Florian Pelz 2022-07-06etc: teams: Add entry for Julien Lepiller....* etc/teams.scm.in ("Julien Lepiller"): New member. Julien Lepiller 2022-07-04etc/guix-install.sh: Check for profile from 'guix home'....If "$HOME/.guix-home/profile" exists, use it for GUIX_PROFILE instead of "$HOME/.guix-profile". * etc/guix-install.sh (sys_create_init_profile): Check for 'guix home' profile. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2022-07-04etc/guix-install.sh: Initialize XDG base directories....The default values from the XDG base directory specification make little sense for Guix System, and some scripts in Guix assume that they are not "empty or unset": for example, see <https://issues.guix.gnu.org/56050>. On foreign distros, however, omitting the default values is likely to break software from the distro, perhaps even preventing the desktop environment from starting. To smooth over the difference, use the system-wide configuration to ensure the environment variables are always explicitly set on foreign distros. * etc/guix-install.sh (sys_create_init_profile): Explicitly initialize XDG base directory variables. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2022-07-04etc: teams: Add entry for Efraim Flashner....* etc/teams.scm.in ("Efraim Flashner"): New member. Efraim Flashner 2022-07-03teams: Add leo Famulari....* etc/teams.scm.in ("Leo Famulari"): New member. Leo Famulari 2022-07-03etc: teams: Add entry for Liliana Prikler....* etc/teams.scm.in ("Liliana Marie Prikler"): New member. Liliana Marie Prikler 2022-07-03etc: teams: Sort members lexicographically by last name....* etc/teams.scm.in: Sort members lexicographically by last name. Liliana Marie Prikler 2022-07-03etc: Update teams....* etc/teams.scm.in: Rename maths team to science and add myself to it. Andreas Enge 2022-07-03etc: Add teams.scm....* etc/teams.scm.in: New file. * configure.ac: Generate executable. * .gitignore: Ignore generated file. Ricardo Wurmus 2022-06-29news: Add 'de' translation....* etc/news.scm: Add German translation of update of 'linux-libre' entry. Florian Pelz 2022-06-29news: Add entry about the update of the 'linux-libre' package....* etc/news.scm: Add entry. Leo Famulari 2022-06-23news: Add 'de' translation....* etc/news.scm: Add German translation of 'guix refresh -L' entry. Florian Pelz 2022-06-22news: Add entry for 'guix refresh -L' change....* etc/news.scm: Add entry. Ludovic Courtès 2022-06-05news: Add 'de' translation....* etc/news.scm: Add German translation of edit sub-commands entry. Florian Pelz 2022-06-05news: Update copyright line....* etc/news.scm: Update Maxime Devos’ copyright header. Florian Pelz 2022-06-04news: Add entry for 'guix system edit' and 'guix home edit'....* etc/news.scm: Add entry. Co-authored-by: Maxime Devos <maximedevos@telenet.be> Ludovic Courtès 2022-05-29bash completion: Fix & unify option parsing....We now correctly recognise ‘guix -Abcdef’ as equivalent to ‘guix -f’. * etc/completion/bash/guix (_guix_is_short_option, guix_is_long_option): New functions. (_guix_is_dash_f, _guix_is_dash_l, _guix_is_dash_L, _guix_is_dash_m) (_guix_is_dash_C, _guix_is_dash_p): Use them. Tobias Geerinckx-Rice 2022-05-31etc/committer: Teach it how to commit package removal....* etc/committer.scm.in (hunk-types): New variable. (<hunk>): Rename hunk-definition? getter to 'hunk-type'. (diff-info): Mute a git warning by separating file names from arguments with '--'. Rename the 'definitions?' variable to 'type'. Use the 'addition type when a new package addition is detected, 'removal when removed else #f. (add-commit-message): Re-indent. (remove-commit-message): New procedure. (main)[definitions]: Make commit message conditional depending on whether it is an addition or removal. [changes]: Adjust indentation. Maxim Cournoyer 2022-05-31etc/committer: Prefix (sxml xpath) symbols to avoid name conflict....This avoids a naming conflict for 'filter', provided by both (srfi srfi-1) and (sxml xpath). * etc/committer.scm.in: Use 'use-modules' instead of 'import', and use a prefix for the (sxml xpath) module. (new-sexp): Adjust accordingly. (change-commit-message): Likewise. Maxim Cournoyer 2022-05-25Move (gnu platform) and (gnu platforms ...) to guix/....* gnu/platform.scm: * gnu/platforms/arm.scm: * gnu/platforms/hurd.scm: * gnu/platforms/mips.scm: * gnu/platforms/powerpc.scm: * gnu/platforms/riscv.scm: * gnu/platforms/s390.scm: * gnu/platforms/x86.scm: Move to guix/. * Makefile.am: * doc/guix.texi (Porting to a New Platform): * etc/release-manifest.scm: * gnu/ci.scm: * gnu/image.scm: * gnu/local.mk: * gnu/packages/bioinformatics.scm: * gnu/packages/bootstrap.scm: * gnu/packages/cross-base.scm: * gnu/packages/instrumentation.scm: * gnu/packages/linux.scm: * gnu/system/image.scm: * gnu/system/images/hurd.scm: * gnu/system/images/novena.scm: * gnu/system/images/pine64.scm: * gnu/system/images/pinebook-pro.scm: * gnu/system/images/rock64.scm: * guix/scripts/build.scm: * guix/scripts/system.scm: * guix/self.scm: Update (gnu platform...) to (guix platform...). Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Josselin Poiret 2022-05-23news: Add 'de' translation....* etc/news.scm: Add German translation of 'guix import elm' entry. Florian Pelz 2022-05-22ci: Do not rely on hardcoded cross-targets lists....* gnu/ci.scm (%cross-targets): Remove it ... (cross-jobs): ... and use the targets procedure instead. * etc/release-manifest.scm: Adapt it. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Mathieu Othacehe 2022-05-22news: Add entry for 'guix import elm'....* etc/news.scm: Add entry. Ludovic Courtès 2022-05-12snippets: Add a 'remove' snippet....* etc/snippets/text-mode/guix-commit-message-remove-package: New file. Maxim Cournoyer 2022-04-24news: Add 'de' translation....* etc/news.scm: Add German translation of update of 'linux-libre' entry. Florian Pelz 2022-04-24news: Fix news entry commit reference....* etc/news: Fix commit reference of news entry about Linux-libre kernel update to 5.17. Guillaume Le Vaillant 2022-04-23news: Add entry about the update of the 'linux-libre' package....* etc/news.scm: Add entry. Leo Famulari