Implement and test suspended and destroyed.

This commit is contained in:
Dominik Pantůček 2023-03-18 16:16:15 +01:00
parent 4c5b3db247
commit b27ddb32e4

View file

@ -75,8 +75,8 @@
(if (dict-has-key? mr key)
(dict-ref mr key)
(if (null? dfl)
(dict-ref (dict-ref mr 'info) key)
(dict-ref (dict-ref mr 'info) key (car dfl)))))
(dict-ref (dict-ref mr 'info (make-dict)) key)
(dict-ref (dict-ref mr 'info (make-dict)) key (car dfl)))))
;; Returns true if the member record represents destroyed member. The
;; *current-month* is a global parameter from period module.
@ -88,22 +88,35 @@
;; Returns true if the member is now suspended
(define (member-suspended? mr)
(let ((suspended (mr-ref mr 'suspended #f)))
(and suspended
(month-in-periods? suspended))))
(let ((suspend (mr-ref mr 'suspend #f)))
(and suspend
(month-in-periods? suspend))))
;; Returns true if the member is active (not suspended or destroyed).
(define (member-active? mr)
(and (not (member-destroyed? mr))
(not (member-suspended? mr))))
;; Performs module self-tests.
(define (member-record-tests!)
(run-tests
member-record
(parameterize ((*current-month* (list 2023 2)))
(test-true member-destroyed?
(parameterize ((*current-month* (list 2023 2)))
(member-destroyed? '((info . ((destroyed . "2010-05")))))))
(parameterize ((*current-month* (list 2009 2)))
(test-false member-destroyed?
(parameterize ((*current-month* (list 2009 2)))
(member-destroyed? '((info . ((destroyed . "2010-05")))))))
(test-false member-destroyed?
(member-destroyed? '((info . ()))))
(test-false member-suspended?
(member-suspended? '((info . ()))))
(test-true member-suspended?
(parameterize ((*current-month* (list 2015 2)))
(member-suspended? '((info . ((suspend ((2010 1) 2022 4))))))))
(test-false member-suspended?
(parameterize ((*current-month* (list 2023 2)))
(member-suspended? '((info . ((suspend ((2010 1) 2022 4))))))))
))
)