|
|
|
;;; Copyright 2022 Edward L. Platt
|
|
|
|
;;;
|
|
|
|
;;; Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
;;; you may not use this file except in compliance with the License.
|
|
|
|
;;; You may obtain a copy of the License at
|
|
|
|
;;;
|
|
|
|
;;; http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
;;;
|
|
|
|
;;; Unless required by applicable law or agreed to in writing, software
|
|
|
|
;;; distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
;;; See the License for the specific language governing permissions and
|
|
|
|
;;; limitations under the License.
|
|
|
|
|
|
|
|
(define-module (tests test-preference)
|
|
|
|
#:use-module (srfi srfi-64)
|
|
|
|
#:use-module (goblins)
|
|
|
|
#:use-module (goblins vrun)
|
|
|
|
#:use-module (goblins actor-lib methods)
|
|
|
|
#:use-module (deliberate))
|
|
|
|
|
|
|
|
(define a-vat (spawn-vat))
|
|
|
|
(define-vat-run a-run a-vat)
|
|
|
|
|
|
|
|
(test-begin "test-deliberate")
|
|
|
|
|
|
|
|
;; Tests for ^deliberation-info
|
|
|
|
(define info (a-run (spawn ^deliberation-info "Power Generator")))
|
|
|
|
|
|
|
|
(test-equal "Power Generator"
|
|
|
|
(a-run ($ info 'topic)))
|
|
|
|
|
|
|
|
(a-run ($ info 'set-topic "Energy"))
|
|
|
|
(test-equal "Energy"
|
|
|
|
(a-run ($ info 'topic)))
|
|
|
|
|
|
|
|
;; Tests for ^deliberation
|
|
|
|
(define delib (a-run (spawn ^deliberation "Power Generator")))
|
|
|
|
|
|
|
|
(test-equal "Power Generator"
|
|
|
|
(a-run ($ delib 'topic)))
|
|
|
|
|
|
|
|
;; Tests for ^ranked-choice-vote
|
|
|
|
(define vote (a-run ($ delib 'add-vote "What type of generator?")))
|
|
|
|
|
|
|
|
(a-run ($ delib 'votes))
|
|
|
|
(a-run ($ vote 'ballots))
|
|
|
|
|
|
|
|
;; Add alternatives
|
|
|
|
(a-run ($ vote 'add-alternative "solar"))
|
|
|
|
(a-run ($ vote 'add-alternative "wind"))
|
|
|
|
(a-run ($ vote 'add-alternative "hydro"))
|
|
|
|
|
|
|
|
;; Tests for ^ranked-ballot
|
|
|
|
(define ballot (a-run ($ vote 'add-ballot)))
|
|
|
|
|
|
|
|
(a-run ($ vote 'ballots))
|
|
|
|
(a-run ($ ballot 'alternatives))
|
|
|
|
(a-run ($ ballot 'question))
|
|
|
|
|
|
|
|
;; Example ranking functions
|
|
|
|
(define (f-wind-solar-hydro alts) '(3 1 2))
|
|
|
|
(define (f-hydro-solar-wind alts) '(1 3 2))
|
|
|
|
(define (f-solar-wind-hydro alts) '(3 2 1))
|
|
|
|
|
|
|
|
;; Cast a single vote
|
|
|
|
(a-run ($ ballot 'update-vote f-wind-solar-hydro))
|
|
|
|
|
|
|
|
(test-equal '("wind" "solar" "hydro")
|
|
|
|
(a-run ($ ballot 'ranking)))
|
|
|
|
|
|
|
|
|
|
|
|
;; Add more votes to test voting methods
|
|
|
|
|
|
|
|
(let ((ballot (a-run ($ vote 'add-ballot))))
|
|
|
|
(a-run ($ ballot 'update-vote f-wind-solar-hydro)))
|
|
|
|
|
|
|
|
(let ((ballot (a-run ($ vote 'add-ballot))))
|
|
|
|
(a-run ($ ballot 'update-vote f-hydro-solar-wind)))
|
|
|
|
(let ((ballot (a-run ($ vote 'add-ballot))))
|
|
|
|
(a-run ($ ballot 'update-vote f-hydro-solar-wind)))
|
|
|
|
|
|
|
|
(let ((ballot (a-run ($ vote 'add-ballot))))
|
|
|
|
(a-run ($ ballot 'update-vote f-solar-wind-hydro)))
|
|
|
|
|
|
|
|
;; Test instant-runoff
|
|
|
|
(test-equal '("wind")
|
|
|
|
(a-run ($ vote 'irv-winner)))
|
|
|
|
|
|
|
|
;; Test Borda method
|
|
|
|
(test-equal '("solar")
|
|
|
|
(a-run ($ vote 'borda-winner)))
|
|
|
|
|
|
|
|
(test-end "test-deliberate")
|