aboutsummaryrefslogtreecommitdiff
path: root/tests/test.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test.scm')
-rwxr-xr-xtests/test.scm53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/test.scm b/tests/test.scm
new file mode 100755
index 0000000..6ce798e
--- /dev/null
+++ b/tests/test.scm
@@ -0,0 +1,53 @@
+#!/usr/bin/guile \
+-s
+!#
+
+(add-to-load-path (dirname (dirname (current-filename))))
+
+(use-modules (srfi srfi-64))
+
+(use-modules (monad)
+ (monad optional))
+
+(define (div d)
+ (if (zero? d)
+ (nothing)
+ (just (/ 1 d))))
+
+(test-begin "mapM-test")
+
+(test-assert (equal? (mapM div '(1 2 3))
+ (just '(1 1/2 1/3))))
+
+(test-assert (equal? (mapM div (map just '(1 2 3)))
+ (just '(1 1/2 1/3))))
+
+;;; --------------------------------------------------
+
+(test-assert (equal? (mapM div '(0 1 2 3))
+ (nothing)))
+
+(test-assert (equal? (mapM div (map just '(0 1 2 3)))
+ (nothing)))
+
+(test-end "mapM-test")
+
+(test-begin "state-test")
+
+(use-modules (monad state)
+ (monad stack))
+
+(test-equal (run-state (return-state 10) 20)
+ '(10 20))
+
+(test-equal
+ (car
+ (run-state
+ (do let y = 7
+ (modify (lambda (x) (+ x y)))
+ (get))
+ 10))
+ 17)
+
+
+(test-end "state-test")