blob: 7a663149b015fca9ced0d45ba42391c4a6e0f8f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
;;; test-org-drill-statistics-quality-histogram.el --- Tests for quality-histogram statistics -*- lexical-binding: t; -*-
;;; Commentary:
;; ERT tests for the org-drill statistics dashboard quality-histogram block.
;;; Code:
(require 'ert)
(require 'org-drill)
(require 'cl-lib)
(require 'org)
(defun test-org-drill-statistics--make-record (qualities)
"Build a minimal `org-drill-session-record' carrying QUALITIES.
QUALITIES is a vector of ints. Other slots are filled with inert
defaults so the histogram tests stay focused on the qualities slot."
(make-org-drill-session-record
:start-time 0.0
:end-time 0.0
:scope nil
:algorithm 'sm5
:qualities qualities
:pass-percent 0
:new-count 0
:mature-count 0
:failed-count 0
:cram-mode nil))
;; Normal cases.
(ert-deftest test-org-drill-statistics-quality-histogram-single-record ()
"A single record's qualities are tallied into the right buckets."
(let* ((record (test-org-drill-statistics--make-record [0 3 3 5 3]))
(result (org-drill-statistics--quality-histogram (list record))))
(should (equal result [1 0 0 3 0 1]))))
(ert-deftest test-org-drill-statistics-quality-histogram-multiple-records ()
"Counts sum across every record in the log."
(let* ((r1 (test-org-drill-statistics--make-record [0 1 2]))
(r2 (test-org-drill-statistics--make-record [3 4 5]))
(r3 (test-org-drill-statistics--make-record [0 5 5]))
(result (org-drill-statistics--quality-histogram (list r1 r2 r3))))
(should (equal result [2 1 1 1 1 3]))))
(ert-deftest test-org-drill-statistics-quality-histogram-all-same-quality ()
"A record with every entry the same quality concentrates in one bucket."
(let* ((record (test-org-drill-statistics--make-record [4 4 4 4]))
(result (org-drill-statistics--quality-histogram (list record))))
(should (equal result [0 0 0 0 4 0]))))
;; Boundary cases.
(ert-deftest test-org-drill-statistics-quality-histogram-empty-log ()
"An empty log yields an all-zero histogram, never nil."
(let ((result (org-drill-statistics--quality-histogram '())))
(should (equal result [0 0 0 0 0 0]))))
(ert-deftest test-org-drill-statistics-quality-histogram-empty-qualities ()
"A record with an empty qualities vector contributes nothing."
(let* ((record (test-org-drill-statistics--make-record []))
(result (org-drill-statistics--quality-histogram (list record))))
(should (equal result [0 0 0 0 0 0]))))
(ert-deftest test-org-drill-statistics-quality-histogram-nil-qualities ()
"A record whose qualities slot is nil is skipped without error."
(let* ((r1 (test-org-drill-statistics--make-record nil))
(r2 (test-org-drill-statistics--make-record [2 2]))
(result (org-drill-statistics--quality-histogram (list r1 r2))))
(should (equal result [0 0 2 0 0 0]))))
(ert-deftest test-org-drill-statistics-quality-histogram-extreme-buckets ()
"Quality 0 and quality 5, the range endpoints, both land correctly."
(let* ((record (test-org-drill-statistics--make-record [0 0 5 5 5]))
(result (org-drill-statistics--quality-histogram (list record))))
(should (equal result [2 0 0 0 0 3]))))
;; Error cases.
(ert-deftest test-org-drill-statistics-quality-histogram-out-of-range-ignored ()
"Qualities outside 0..5 are dropped, valid ones still counted."
(let* ((record (test-org-drill-statistics--make-record [-1 6 3 99 2]))
(result (org-drill-statistics--quality-histogram (list record))))
(should (equal result [0 0 1 1 0 0]))))
(ert-deftest test-org-drill-statistics-quality-histogram-non-integer-ignored ()
"Non-integer quality entries are ignored rather than signalling."
(let* ((record (test-org-drill-statistics--make-record [2 nil 2.5 3]))
(result (org-drill-statistics--quality-histogram (list record))))
(should (equal result [0 0 1 1 0 0]))))
(ert-deftest test-org-drill-statistics-quality-histogram-does-not-mutate-input ()
"The qualities vectors are read, never written."
(let* ((qualities (vector 1 2 3))
(record (test-org-drill-statistics--make-record qualities)))
(org-drill-statistics--quality-histogram (list record))
(should (equal qualities [1 2 3]))))
(provide 'test-org-drill-statistics-quality-histogram)
;;; test-org-drill-statistics-quality-histogram.el ends here
|