aboutsummaryrefslogtreecommitdiff
path: root/tests/size.scm
blob: 0aaa8fbc2980492a50268edf83b167d65100252c (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.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-size)
  #:use-module (guix store)
  #:use-module (guix monads)
  #:use-module (guix packages)
  #:use-module (guix derivations)
  #:use-module (guix gexp)
  #:use-module (guix tests)
  #:use-module (guix scripts size)
  #:use-module (gnu packages)
  #:use-module (gnu packages bootstrap)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-64))


(test-begin "size")

(test-assertm "store-profile"
  (mlet* %store-monad ((file1 (gexp->derivation "file1"
                                                #~(symlink #$%bootstrap-guile
                                                           #$output)))
                       (file2 (text-file* "file2"
                                          "the file => " file1)))
    (define (matching-profile item)
      (lambda (profile)
        (string=? item (profile-file profile))))

    (mbegin %store-monad
      (built-derivations (list file2))
      (mlet %store-monad ((profiles (store-profile
                                     (list (derivation->output-path file2))))
                          (bash     (interned-file
                                     (search-bootstrap-binary
                                      "bash" (%current-system)) "bash"
                                      #:recursive? #t))
                          (guile    (package->derivation %bootstrap-guile)))
        (define (lookup-profile item)
          (find (matching-profile (if (derivation? item)
                                      (derivation->output-path item)
                                      item))
                profiles))

        (letrec-syntax ((match* (syntax-rules (=>)
                                  ((_ ((drv => profile) rest ...) body)
                                   (match (lookup-profile drv)
                                     ((? profile? profile)
                                      (match* (rest ...) body))))
                                  ((_ () body)
                                   body))))
          ;; Make sure we get all three profiles with sensible values.
          (return (and (= (length profiles) 4)
                       (match* ((file1 => profile1)
                                (file2 => profile2)
                                (guile => profile3)
                                (bash  => profile4)) ;dependency of GUILE
                         (and (> (profile-closure-size profile2) 0)
                              (= (profile-closure-size profile2)
                                 (+ (profile-self-size profile1)
                                    (profile-self-size profile2)
                                    (profile-self-size profile3)
                                    (profile-self-size profile4))))))))))))

(test-assertm "store-profile with multiple items"
  (mlet* %store-monad ((file1 (gexp->derivation "file1"
                                                #~(symlink #$%bootstrap-guile
                                                           #$output)))
                       (file2 (text-file* "file2"
                                          "the file => " file1)))
    (mbegin %store-monad
      (built-derivations (list file2))
      (mlet %store-monad ((profiles  (store-profile
                                      (list (derivation->output-path file2)
                                            (derivation->output-path file1))))
                          (reference (store-profile
                                      (list (derivation->output-path file2)))))
        (return (and (= (length profiles) 4)
                     (lset= equal? profiles reference)))))))

(test-end "size")

;;; Local Variables:
;;; eval: (put 'match* 'scheme-indent-function 1)
;;; End:
/about/test/compress/evaluate.js?id=b37a68c84f7b74de8ec7fc862792964c436fa2ec'>about -rw-r--r--functions.js12703logplainabout -rw-r--r--global_defs.js4142logplainabout -rw-r--r--hoist_props.js12378logplainabout -rw-r--r--hoist_vars.js2027logplainabout -rw-r--r--html_comments.js1347logplainabout -rw-r--r--if_return.js6917logplainabout -rw-r--r--issue-1034.js9413logplainabout -rw-r--r--issue-1041.js482logplainabout -rw-r--r--issue-1052.js3226logplainabout -rw-r--r--issue-1105.js7157logplainabout -rw-r--r--issue-12.js1307logplainabout -rw-r--r--issue-1202.js989logplainabout -rw-r--r--issue-126.js839logplainabout -rw-r--r--issue-1261.js7294logplainabout -rw-r--r--issue-1275.js1386logplainabout -rw-r--r--issue-1321.js1169logplainabout -rw-r--r--issue-143.js1096logplainabout -rw-r--r--issue-1431.js3260logplainabout -rw-r--r--issue-1443.js1260logplainabout -rw-r--r--issue-1446.js1809logplainabout -rw-r--r--issue-1447.js951logplainabout -rw-r--r--issue-1569.js345logplainabout -rw-r--r--issue-1588.js1715logplainabout -rw-r--r--issue-1609.js1096logplainabout -rw-r--r--issue-1639.js1675logplainabout -rw-r--r--issue-1656.js1051logplainabout -rw-r--r--issue-1673.js3258logplainabout -rw-r--r--issue-1704.js6893logplainabout -rw-r--r--issue-1733.js2181logplainabout -rw-r--r--issue-1750.js941logplainabout -rw-r--r--issue-1770.js5182logplainabout -rw-r--r--issue-1787.js344logplainabout -rw-r--r--issue-1833.js2431logplainabout -rw-r--r--issue-1943.js378logplainabout -rw-r--r--issue-208.js1463logplainabout -rw-r--r--issue-22.js336logplainabout -rw-r--r--issue-267.js198logplainabout -rw-r--r--issue-269.js800logplainabout -rw-r--r--issue-281.js9988logplainabout -rw-r--r--issue-368.js1332logplainabout -rw-r--r--issue-44.js601logplainabout -rw-r--r--issue-59.js551logplainabout -rw-r--r--issue-597.js3243logplainabout -rw-r--r--issue-611.js315logplainabout -rw-r--r--issue-637.js404logplainabout -rw-r--r--issue-640.js6708logplainabout -rw-r--r--issue-747.js840logplainabout -rw-r--r--issue-751.js557logplainabout -rw-r--r--issue-782.js554logplainabout -rw-r--r--issue-892.js930logplainabout -rw-r--r--issue-913.js373logplainabout -rw-r--r--issue-973.js1858logplainabout -rw-r--r--issue-976.js2631logplainabout -rw-r--r--issue-979.js2093logplainabout -rw-r--r--labels.js3176logplainabout -rw-r--r--loops.js8168logplainabout -rw-r--r--max_line_len.js676logplainabout -rw-r--r--negate-iife.js8722logplainabout -rw-r--r--new.js3012logplainabout -rw-r--r--node_version.js728logplainabout -rw-r--r--numbers.js4063logplainabout -rw-r--r--properties.js34838logplainabout -rw-r--r--pure_funcs.js5593logplainabout -rw-r--r--pure_getters.js11929logplainabout -rw-r--r--reduce_vars.js92447logplainabout -rw-r--r--rename.js10759logplainabout -rw-r--r--return_undefined.js2738logplainabout -rw-r--r--sandbox.js248logplainabout -rw-r--r--screw-ie8.js7191logplainabout -rw-r--r--sequences.js15083logplainabout -rw-r--r--string-literal.js476logplainabout -rw-r--r--switch.js14434logplainabout -rw-r--r--transform.js2295logplainabout -rw-r--r--typeof.js1273logplainabout -rw-r--r--unicode.js1258logplainabout -rw-r--r--wrap_iife.js955logplainabout