branch: elpa/gnosis
commit 512ad9a9823175ebc8d696815c16fcdd41cd0e5f
Author: Thanos Apollo <pub...@thanosapollo.org>
Commit: Thanos Apollo <pub...@thanosapollo.org>

    Update tests
---
 tests/gnosis-test-algorithm.el | 405 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 405 insertions(+)

diff --git a/tests/gnosis-test-algorithm.el b/tests/gnosis-test-algorithm.el
new file mode 100644
index 0000000000..ab807cea72
--- /dev/null
+++ b/tests/gnosis-test-algorithm.el
@@ -0,0 +1,405 @@
+;;; gnosis-test-algorithm.el --- Gnosis Algorithm tests  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2023  Thanos Apollo
+
+;; Author: Thanos Apollo <pub...@thanosapollo.org>
+;; Keywords: extensions
+;; URL: https://git.thanosapollo.org/gnosis
+;; Version: 0.0.1
+
+;; Package-Requires: ((emacs "27.2") (compat "29.1.4.2"))
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Testing module for gnosis algorithm functions.
+
+;; Before making any push on master we should be passing the following
+;; tests.
+
+;;; Code:
+(require 'ert)
+(require 'gnosis)
+
+(let ((parent-dir (file-name-directory
+                   (directory-file-name
+                    (file-name-directory (or load-file-name 
default-directory))))))
+  (add-to-list 'load-path parent-dir))
+
+(ert-deftest gnosis-test-algorithm-next-interval-proto ()
+  "Test next interval for proto values."
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 1.3
+                                                :success t
+                                                :successful-reviews 0
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 0
+                                                :lethe 3)
+                (gnosis-algorithm-date 1)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 1.3
+                                                :success t
+                                                :successful-reviews 1
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 0
+                                                :lethe 3)
+                (gnosis-algorithm-date 2)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 1.3
+                                                :success t
+                                                :successful-reviews 2
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 0
+                                                :lethe 3)
+                (gnosis-algorithm-date 3)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 1.3
+                                                :success t
+                                                :successful-reviews 3
+                                                :amnesia 0.5
+                                                :proto '(1 2 3 70)
+                                                :c-fails 0
+                                                :lethe 3)
+                (gnosis-algorithm-date 70)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 2.0
+                                                :success t
+                                                :successful-reviews 4
+                                                :amnesia 0.5
+                                                :proto '(1 2 3 70)
+                                                :c-fails 0
+                                                :lethe 3)
+                (gnosis-algorithm-date 2)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 3.0
+                                                :success t
+                                                :successful-reviews 5
+                                                :amnesia 0.5
+                                                :proto '(1 2 3 70)
+                                                :c-fails 0
+                                                :lethe 3)
+                (gnosis-algorithm-date 3))))
+
+(ert-deftest gnosis-test-algorithm-next-interval-lethe ()
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 0
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 3)
+                (gnosis-algorithm-date)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 0
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 0
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 20.0
+                                                :success nil
+                                                :successful-reviews 2
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date 5)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 20.0
+                                                :success nil
+                                                :successful-reviews 2
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 5
+                                                :lethe 4)
+                (gnosis-algorithm-date))))
+
+(ert-deftest gnosis-test-algorithm-next-interval-success ()
+  "Test next interval for successful non-proto recalls."
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 2.0
+                                                :success t
+                                                :successful-reviews 5
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 500
+                                                :lethe 4)
+                (gnosis-algorithm-date 20)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 3
+                                                :gnosis-synolon 1.3
+                                                :success t
+                                                :successful-reviews 5
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 300
+                                                :lethe 4)
+                (gnosis-algorithm-date 4))))
+
+(ert-deftest gnosis-test-algorithm-next-interval-amnesia ()
+  "Test next interval for failed non-proto recalls."
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 3
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date 5)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 3
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 3
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date 2)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 2
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 3
+                                                :amnesia 0.5
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date 1)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 3
+                                                :amnesia 0.7
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date 3)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 3
+                                                :amnesia 0.8
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date 2)))
+  (should (equal (gnosis-algorithm-next-interval :last-interval 10
+                                                :gnosis-synolon 1.3
+                                                :success nil
+                                                :successful-reviews 3
+                                                :amnesia 1.0
+                                                :proto '(1 2 3)
+                                                :c-fails 3
+                                                :lethe 4)
+                (gnosis-algorithm-date))))
+
+(ert-deftest gnosis-test-algorithm-next-gnosis-synolon ()
+  "Test algorithm for gnosis synolon (totalis)."
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.35 0.30 1.30)
+                 :success t
+                 :epignosis 0.3
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 1
+                 :c-failures 0)
+                '(0.35 0.30 1.65)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 1.30)
+                 :success t
+                 :epignosis 0.3
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 1
+                 :c-failures 0)
+                '(0.45 0.30 1.75)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 2.0)
+                 :success nil
+                 :epignosis 0.3
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 1
+                 :c-failures 0)
+                '(0.45 0.30 1.70)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success nil
+                 :epignosis 0.3
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 1
+                 :c-failures 0)
+                '(0.45 0.30 3.2))))
+
+(ert-deftest gnosis-test-algorithm-test-epignosis ()
+  "Test epignosis during anagnosis events."
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success t
+                 :epignosis 0.3
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 3
+                 :c-failures 0)
+                '(0.75 0.30 3.95)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success t
+                 :epignosis 0.2
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 3
+                 :c-failures 0)
+                '(0.65 0.30 3.95)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success t
+                 :epignosis 0.2
+                 :agnoia 0.2
+                 :anagnosis 4
+                 :c-successes 3
+                 :c-failures 0)
+                '(0.45 0.30 3.95))))
+
+(ert-deftest gnosis-test-algorithm-test-agnoia ()
+  "Test epignosis during anagnosis events."
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success nil
+                 :epignosis 0.3
+                 :agnoia 0.2
+                 :anagnosis 3
+                 :c-successes 0
+                 :c-failures 3)
+                '(0.45 0.5 3.2)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success nil
+                 :epignosis 0.3
+                 :agnoia 0.3
+                 :anagnosis 3
+                 :c-successes 0
+                 :c-failures 3)
+                '(0.45 0.6 3.2)))
+  (should (equal (gnosis-algorithm-next-gnosis
+                 :gnosis '(0.45 0.30 3.5)
+                 :success nil
+                 :epignosis 0.3
+                 :agnoia 0.3
+                 :anagnosis 4
+                 :c-successes 0
+                 :c-failures 3)
+                '(0.45 0.3 3.2))))
+
+(ert-deftest gnosis-test-get-note-deck-value ()
+  "Test recovery of deck amnesia values."
+  (let ((test-values '((:deck "demo"
+                             (:proto (0 1 3) :anagnosis 3 :epignosis 0.5 
:agnoia 0.3 :amnesia 0.5 :lethe 3))
+                      (:deck "demo2"
+                             (:proto (0 1 3)))
+                      (:tag "demo"
+                            (:proto (1 2) :anagnosis 2 :epignosis 0.2 :agnoia 
0.3 :amnesia 0.4 :lethe 4)))))
+    (should (= (gnosis-get-custom-deck-value "demo" :amnesia test-values) 0.5))
+    (should (= (gnosis-get-note-deck-epignosis nil "demo" test-values) 0.5))
+    (should (= (gnosis-get-note-deck-amnesia nil "demo"  test-values) 0.5))
+    (should (= (gnosis-get-note-deck-agnoia nil "demo"  test-values) 0.3))
+    (should (= (gnosis-get-note-deck-anagnosis nil "demo" test-values) 3))
+    (should (= (gnosis-get-note-deck-lethe nil "demo" test-values) 3))
+    (should (= (gnosis-get-note-deck-lethe nil "demo" test-values) 3))
+    (should (= (gnosis-get-note-deck-lethe nil "demo2" test-values) 
gnosis-algorithm-lethe-value))
+    (should (= (gnosis-get-note-deck-anagnosis nil "demo2" test-values) 
gnosis-algorithm-anagnosis-value))
+    (should (= (gnosis-get-note-deck-epignosis nil "demo2" test-values) 
gnosis-algorithm-epignosis-value))
+    (should (= (gnosis-get-note-deck-agnoia nil "demo2" test-values) 
gnosis-algorithm-agnoia-value))
+    (should (= (gnosis-get-note-deck-amnesia nil "demo2" test-values) 
gnosis-algorithm-amnesia-value))))
+
+(ert-deftest gnosis-test-get-custom-tag-amnesia ()
+  "Test recovery of tag amnesia values."
+  (let ((test-values '((:deck "tag1" (:proto (99 99 99) :epignosis 0.5 :agnoia 
0.3 :amnesia 0.5 :lethe 3))
+                      (:tag "tag1" (:proto (0 1 3) :epignosis 0.5 :agnoia 0.3 
:amnesia 0.3 :lethe 3))
+                      (:tag "tag2" (:proto (1 2) :epignosis 0.5 :agnoia 0.3 
:amnesia 0.5 :lethe 4))
+                      (:tag "tag3" (:proto (2 4 10) :epignosis 0.5 :agnoia 0.5 
:amnesia 0.9 :lethe 2)))))
+    (should (equal (gnosis-get-custom-tag-values nil :amnesia '("tag1") 
test-values) (list 0.3)))
+    (should (equal (gnosis-get-note-tag-amnesia nil '("tag1") test-values) 
0.3))
+    (should (equal (gnosis-get-note-tag-amnesia nil '("tag1" "tag2") 
test-values) 0.5))
+    (should (equal (gnosis-get-note-tag-amnesia nil '("tag1" "tag2" "tag3") 
test-values) 0.9))
+    (should (equal (gnosis-get-note-tag-amnesia nil '("tag2" "tag1") 
test-values) 0.5))))
+
+(ert-deftest gnosis-test-get-proto ()
+  (let ((test-values '((:deck "deck1" (:proto (0 1 3) :epignosis 0.5 :agnoia 
0.3 :amnesia 0.3 :lethe 3))
+                      (:tag "tag1" (:epignosis 0.5))
+                      (:tag "tag2" (:proto (2 2 2) :epignosis 0.5))
+                      (:tag "tag3" (:proto (1 1 1 1) :epignosis 0.5)))))
+    (should (equal (gnosis-get-note-proto nil '("tag1") "deck1" test-values) 
'(0 1 3)))
+    (should (equal (gnosis-get-note-proto nil '("tag1" "tag2") "deck1" 
test-values) '(2 2 2)))
+    (should (equal (gnosis-get-note-proto nil '("tag1" "tag2" "tag3") "deck1" 
test-values) '(2 2 2 1)))))
+
+(ert-deftest gnosis-test-get-note-amnesia ()
+  (let ((test-values '((:deck "deck1" (:proto (0 1 3) :epignosis 0.5 :agnoia 
0.3 :amnesia 0.3 :lethe 3))
+                      (:tag "tag1" (:proto (10 1) :epignosis 0.5))
+                      (:tag "tag2" (:proto (2 2 2) :epignosis 0.5 :amnesia 
0.2))
+                      (:tag "tag3" (:proto (1 1 1 1) :epignosis 0.5 :amnesia 
0.6)))))
+    (should (equal (gnosis-get-note-amnesia nil "deck1" '("tag1") test-values) 
0.3))
+    (should (equal (gnosis-get-note-amnesia nil "deck1" '("tag1" "tag2") 
test-values) 0.2))
+    (should (equal (gnosis-get-note-amnesia nil "deck1" '("tag1" "tag3") 
test-values) 0.6))
+    (should (equal (gnosis-get-note-amnesia nil "deck1" '("tag2" "tag3") 
test-values) 0.6))))
+
+(ert-deftest gnosis-test-get-note-epginosis ()
+  (let ((test-values'((:deck "deck1" (:proto (0 1 3) :epignosis 0.5 :agnoia 
0.3 :amnesia 0.3 :lethe 3))
+                     (:tag "tag1" (:proto (10 1) :amnesia 0.5))
+                     (:tag "tag2" (:proto (2 2 2) :epignosis 0.6 :amnesia 0.2))
+                     (:tag "tag3" (:proto (1 1 1 1) :epignosis 0.7 :amnesia 
0.4)))))
+    (should (equal (gnosis-get-note-epignosis nil "deck1" '("tag1") 
test-values) 0.5))
+    (should (equal (gnosis-get-note-epignosis nil "deck1" '("tag1" "tag2") 
test-values) 0.6))
+    (should (equal (gnosis-get-note-epignosis nil "deck1" '("tag2" "tag3") 
test-values) 0.7))))
+
+(ert-deftest gnosis-test-get-note-agnoia ()
+  (let ((test-values'((:deck "deck1" (:proto (0 1 3) :epignosis 0.5 :agnoia 
0.3 :amnesia 0.3 :lethe 3))
+                     (:tag "tag1" (:proto (10 1) :epignosis 0.4 :amnesia 0.5))
+                     (:tag "tag2" (:proto (2 2 2) :epignosis 0.6 :amnesia 0.2 
:agnoia 0.4))
+                     (:tag "tag3" (:proto (1 1 1 1) :epignosis 0.7 :amnesia 
0.4 :agnoia 0.5)))))
+    (should (equal (gnosis-get-note-agnoia nil "deck1" '("tag1") test-values) 
0.3))
+    (should (equal (gnosis-get-note-agnoia nil "deck1" '("tag1" "tag2") 
test-values) 0.4))
+    (should (equal (gnosis-get-note-agnoia nil "deck1" '("tag1" "tag2" "tag3") 
test-values) 0.5))))
+
+(ert-deftest gnosis-test-get-note-anagnosis ()
+  (let ((test-values '((:deck "deck1" (:proto (0 1 3) :anagnosis 3 :amnesia 
0.3 :lethe 3))
+                      (:deck "deck2" (:anagnosis 1 :amnesia 0.3 :lethe 3))
+                      (:tag "tag1" (:proto (10 1)))
+                      (:tag "tag2" (:proto (2 2 2) :amnesia 0.2 :agnoia 0.4 
:anagnosis 2))
+                      (:tag "tag3" (:proto (1 1 1 1) :amnesia 0.3)))))
+    (should (equal (gnosis-get-note-anagnosis nil "deck1" '("tag1") 
test-values) 3))
+    (should (equal (gnosis-get-note-anagnosis nil "deck1" '("tag1" "tag2") 
test-values) 2))
+    (should (equal (gnosis-get-note-anagnosis nil "deck2" '("tag1" "tag2") 
test-values) 2))))
+
+(ert-deftest gnosis-test-get-note-lethe ()
+  (let ((test-values '((:deck "deck1" (:proto (0 1 3) :anagnosis 3 :amnesia 
0.3 :lethe 3))
+                      (:deck "deck2" (:anagnosis 1 :lethe 9))
+                      (:tag "tag1" (:proto (10 1) :lethe nil))
+                      (:tag "tag2" (:proto (2 2 2) :lethe 2))
+                      (:tag "tag3" (:proto (1 1 1 1) :amnesia 0.3 :lethe 1)))))
+    (should (equal (gnosis-get-note-lethe nil "deck1" '("tag1") test-values) 
3))
+    (should (equal (gnosis-get-note-lethe nil "deck1" '("tag2") test-values) 
2))
+    (should (equal (gnosis-get-note-lethe nil "deck2" '("tag3" "tag2") 
test-values) 1))
+    (should (equal (gnosis-get-note-lethe nil "deck2" '("tag1" "tag2") 
test-values) 2))))
+
+
+(ert-run-tests-batch-and-exit)

Reply via email to