-
Notifications
You must be signed in to change notification settings - Fork 5
/
tests.el
134 lines (105 loc) · 4.98 KB
/
tests.el
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
;;; tests.el --- tests for i-ching.el -*- coding: utf-8; lexical-binding: t -*-
;;; Commentary:
;;
;; some simple tests...
;;; Code:
(require 'ert)
(require 'with-simulated-input)
(require 'i-ching)
;; range 0-63 NOTE: doesn't fail when rate-limit is hit
(ert-deftest i-ching-qrnd ()
(should (numberp (i-ching-q64)))
(should (<= 0 (i-ching-q64)))
(should (> 64 (i-ching-q64))))
;; range 0-63
(ert-deftest i-ching-rrnd ()
(should (numberp (i-ching-r64)))
(should (<= 0 (i-ching-r64)))
(should (> 64 (i-ching-r64))))
(ert-deftest i-ching-random ()
(should (numberp (i-ching-random 64 'quantum)))
(should (numberp (i-ching-random 64 'atmospheric)))
(should (numberp (i-ching-random 64 'pseudo)))
(should (numberp (i-ching-random 64))))
(ert-deftest i-ching-n2h ()
(should (string= "䷁" (i-ching-number-to-hexagram 2)))
(should (string= "䷩" (i-ching-number-to-hexagram 42)))
(should (string= nil (i-ching-number-to-hexagram 65))))
(ert-deftest i-ching-h2n ()
(should (eql 2 (i-ching-hexagram-to-number "䷁")))
(should (eql 40 (i-ching-hexagram-to-number "䷧")))
(should-not (i-ching-hexagram-to-number "NOT")))
(ert-deftest i-ching-b2h ()
(string= "䷧" (i-ching-binary-to-hexagram #b010100)))
(ert-deftest i-ching-names ()
(should-not (i-ching-number-to-name 0))
(should-not (i-ching-number-to-name 65))
(should (string= "HEXAGRAM FOR BEFORE COMPLETION"
(i-ching-number-to-unicode-name 64)))
(should (string= "Before Completion"
(i-ching-number-to-name 64))))
(ert-deftest i-ching-descriptions ()
(should (stringp (i-ching-number-to-description 43)))
(should (stringp (i-ching-number-to-judgment 27)))
(should (stringp (i-ching-number-to-image 13)))
(should-not (stringp (i-ching-number-to-description 0)))
(should-not (stringp (i-ching-number-to-judgment 0)))
(should-not (stringp (i-ching-number-to-image 0)))
(should-not (stringp (i-ching-number-to-description 65)))
(should-not (stringp (i-ching-number-to-judgment 65)))
(should-not (stringp (i-ching-number-to-image 65))))
(ert-deftest i-ching-all-descriptions ()
(dotimes (i 63)
(should-not (seq-empty-p (i-ching-number-to-unicode-name (1+ i))))
(should-not (seq-empty-p (i-ching-number-to-description (1+ i))))
(should-not (seq-empty-p (i-ching-number-to-judgment (1+ i))))
(should-not (seq-empty-p (i-ching-number-to-image (1+ i))))
(should-not (seq-empty-p (i-ching-number-to-name (1+ i))))
(should (stringp (i-ching-number-to-unicode-name (1+ i))))
(should (stringp (i-ching-number-to-description (1+ i))))
(should (stringp (i-ching-number-to-judgment (1+ i))))
(should (stringp (i-ching-number-to-image (1+ i))))
(should (stringp (i-ching-number-to-name (1+ i))))))
(ert-deftest i-ching-interprets ()
(should (stringp (i-ching-interpretation 49)))
(should (stringp (i-ching-interpretation "23")))
(should (stringp (i-ching-interpretation "䷖")))
(should-not (seq-empty-p (i-ching-interpretation 49)))
(should-not (seq-empty-p (i-ching-interpretation "23")))
(should-not (seq-empty-p (i-ching-interpretation "䷖"))))
(ert-deftest i-ching-queries ()
(should (stringp (i-ching-query-string)))
(should (stringp (i-ching-query-string '3-coins))))
(ert-deftest i-ching-castings ()
(should (stringp (i-ching-cast 'yarrow-stalks)))
(should (stringp (i-ching-cast '3-coins)))
(should (stringp (i-ching-cast))))
;; randomness
(defun χ² (expected observed)
"Chi-squared test for EXPECTED OBSERVED sequences."
(cl-reduce #'+
(cl-mapcar
(lambda (e o) (/ (expt (- o e) 2) e))
expected observed)))
;; (mapcar (lambda (n)
;; (i-ching-random n 'atmospheric))
;; (make-list 1024 64))
;; interactive testing
;; (i-ching-query '6-bit)
;; (i-ching-query '3-coins)
;; (i-ching-query 'yarrow-stalks)
(ert-deftest i-ching-query-6bit ()
(should (with-simulated-input
"testing SPC circumstances RET"
(i-ching-query '6-bit))))
(ert-deftest i-ching-query-3coin ()
(should (with-simulated-input
"testing SPC circumstances RET"
(i-ching-query '3-coins))))
(ert-deftest i-ching-query-yarrow ()
(should (with-simulated-input
"testing SPC circumstances RET"
(i-ching-query 'yarrow-stalks))))
;; run them...
(ert t)
;;; tests.el ends here