Prepare stats infrastructure.
This commit is contained in:
		
							parent
							
								
									15926d124e
								
							
						
					
					
						commit
						cd2a08e2ec
					
				
					 2 changed files with 30 additions and 5 deletions
				
			
		|  | @ -260,17 +260,34 @@ | |||
| 		      (member-nick mr))) | ||||
| 	   mrs)))) | ||||
| 
 | ||||
|  ;; Returns dictionary with statistics about the members base. | ||||
|  (define (members-base-info mb) | ||||
|    (let* ((di0 (make-dict)) | ||||
| 	  (di1 (dict-set di0 'invalid | ||||
| 			 (filter-members-by-predicate mb | ||||
| 						      (compose not is-4digit-prime? member-id)))) | ||||
| 	  (di2 (dict-set di1 'active | ||||
| 			 (filter-members-by-predicate mb member-active?))) | ||||
| 	  (di3 (dict-set di2 'suspended | ||||
| 			 (filter-members-by-predicate mb member-suspended?))) | ||||
| 	  (di4 (dict-set di3 'students | ||||
| 			 (filter-members-by-predicate mb member-student?))) | ||||
| 	  (di5 (dict-set di4 'destroyed | ||||
| 			 (filter-members-by-predicate mb member-destroyed?)))) | ||||
|      di5)) | ||||
| 
 | ||||
|  ;; Basic information about members-base in human-readable form. | ||||
|  (define (print-members-base-info mb) | ||||
|   (let ((nicks (list-members-nicks mb)) | ||||
| 	(ids (list-members-ids mb))) | ||||
|     (print "Known members: " | ||||
| 	   (length nicks)) | ||||
|     (let ((invalid-mrs (filter-members-by-predicate mb (compose not is-4digit-prime? member-id))) | ||||
| 	  (active-mrs (filter-members-by-predicate mb member-active?)) | ||||
| 	  (suspended-mrs (filter-members-by-predicate mb member-suspended?)) | ||||
| 	  (destroyed-mrs (filter-members-by-predicate mb member-destroyed?)) | ||||
| 	  (student-mrs (filter-members-by-predicate mb member-student?))) | ||||
|     (let* ((bi (members-base-info mb)) | ||||
| 	   (invalid-mrs (dict-ref bi 'invalid)) | ||||
| 	   (active-mrs (dict-ref bi 'active)) | ||||
| 	   (suspended-mrs (dict-ref bi 'suspended)) | ||||
| 	   (destroyed-mrs (dict-ref bi 'destroyed)) | ||||
| 	   (student-mrs (dict-ref bi 'students))) | ||||
|       (print a:success "  Active (" (length active-mrs) "): " a:default | ||||
| 	     (member-records->nicks-string active-mrs)) | ||||
|       (print a:warning "  Suspended (" (length suspended-mrs) "): " a:default | ||||
|  |  | |||
|  | @ -34,6 +34,7 @@ | |||
|   month=? | ||||
|   month<? | ||||
|   month-diff | ||||
|   month-add | ||||
|   month-tests! | ||||
|   ) | ||||
| 
 | ||||
|  | @ -113,6 +114,12 @@ | |||
| 	   (error 'month-diff "Second argument is not a valid month" t)) | ||||
|        (error 'month-diff "First argument is not a valid month" f))) | ||||
| 
 | ||||
|  ;; Returns a month n months after the month m. | ||||
|  (define (month-add m n) | ||||
|    (let ((mi (+ (* 12 (car m)) (cadr m) n))) | ||||
|      (list (quotient mi 12) | ||||
| 	   (remainder mi 12)))) | ||||
| 
 | ||||
|  ;; Performs self-tests of the month module. | ||||
|  (define (month-tests!) | ||||
|    (run-tests | ||||
|  | @ -136,6 +143,7 @@ | |||
|     (test-eq? month-diff (month-diff '(2023 1) '(2023 2)) 1) | ||||
|     (test-eq? month-diff (month-diff '(2023 1) '(2023 12)) 11) | ||||
|     (test-eq? month-diff (month-diff '(2023 1) '(2022 2)) -11) | ||||
|     (test-eq? month-add (month-add '(2023 1) 2) '(2023 3)) | ||||
|     )) | ||||
| 
 | ||||
|  ) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue