From b27ddb32e4b9d3b9cc1c825e3b324ea5807f2326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sat, 18 Mar 2023 16:16:15 +0100 Subject: [PATCH] Implement and test suspended and destroyed. --- member-record.scm | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/member-record.scm b/member-record.scm index 71124f4..b532be7 100644 --- a/member-record.scm +++ b/member-record.scm @@ -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? + (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? + (test-false member-destroyed? + (parameterize ((*current-month* (list 2009 2))) (member-destroyed? '((info . ((destroyed . "2010-05"))))))) (test-false member-destroyed? - (member-destroyed? '((info . ())))) + (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)))))))) )) )