aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 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-workers)
  #:use-module (guix workers)
  #:use-module (ice-9 threads)
  #:use-module (srfi srfi-64))

(test-begin "workers")

(test-equal "enqueue"
  4242
  (let* ((pool   (make-pool))
         (result 0)
         (1+!    (let ((lock (make-mutex)))
                   (lambda ()
                     (with-mutex lock
                       (set! result (+ result 1)))))))
    (let loop ((i 4242))
      (unless (zero? i)
        (pool-enqueue! pool 1+!)
        (loop (- i 1))))
    (let poll ()
      (unless (pool-idle? pool)
        (pk 'busy result)
        (sleep 1)
        (poll)))
    result))

;; Same as above, but throw exceptions within the workers and make sure they
;; remain alive.
(test-equal "exceptions"
  4242
  (let* ((pool   (make-pool 10))
         (result 0)
         (1+!    (let ((lock (make-mutex)))
                   (lambda ()
                     (with-mutex lock
                       (set! result (+ result 1)))))))
    (let loop ((i 10))
      (unless (zero? i)
        (pool-enqueue! pool (lambda ()
                              (throw 'whatever)))
        (loop (- i 1))))
    (let loop ((i 4242))
      (unless (zero? i)
        (pool-enqueue! pool 1+!)
        (loop (- i 1))))
    (let poll ()
      (unless (pool-idle? pool)
        (pk 'busy result)
        (sleep 1)
        (poll)))
    result))

(test-end)
/td>gnu: spice: Update to 0.14.3....* gnu/packages/spice.scm (spice): Update to 0.14.3. [source]: Remove obsolete patch. * gnu/packages/patches/spice-fix-test-armhf.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. Tobias Geerinckx-Rice 2020-03-07gnu: zimg: Update to 2.9.3....* gnu/packages/image.scm (zimg): Update to 2.9.3. Tobias Geerinckx-Rice 2020-02-29gnu: Add libavif....* gnu/packages/image.scm (libavif): New variable. Leo Famulari 2020-02-29gnu: Add icoutils....* gnu/packages/image.scm (icoutils): New variable. Hartmut Goebel 2020-02-24gnu: Add lodepng....* gnu/packages/image.scm (lodepng): New variable. Signed-off-by: Marius Bakke <mbakke@fastmail.com> Giacomo Leidi 2020-02-14gnu: VIGRA: Try to fix a build failure on the build farm....* gnu/packages/image.scm (vigra)[properties]: Set the maximum silent time to 7200 seconds. Leo Famulari 2020-01-21Merge branch 'master' into stagingMarius Bakke 2020-01-20gnu: pngquant: Update to 2.12.6....* gnu/packages/image.scm (pngquant): Update to 2.12.6. Tobias Geerinckx-Rice 2020-01-19gnu: libwebp: Update to 1.1.0....* gnu/packages/image.scm (libwebp): Update to 1.1.0. Marius Bakke 2019-12-18Merge branch 'master' into stagingMarius Bakke 2019-12-13gnu: imlib2: Update to 1.6.1....* gnu/packages/image.scm (imlib2): Update to 1.6.1. Efraim Flashner