commit 7e19d80130b78c8199a63e925f15d20ebbef437b
parent 0f0688c8023d8e83966042187f178ce79b995da6
Author: Daniel Barlow <dan@telent.net>
Date: Sat, 20 Apr 2024 14:04:32 +0100
anoia: add assert macro module
contains expect and expect=
Diffstat:
4 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/pkgs/anoia/Makefile b/pkgs/anoia/Makefile
@@ -0,0 +1,9 @@
+
+default: fs.lua init.lua nl.lua svc.lua
+
+test:
+ ln -s . anoia
+ fennel test.fnl
+
+%.lua: %.fnl
+ fennel --compile $< > $@
diff --git a/pkgs/anoia/assert.fnl b/pkgs/anoia/assert.fnl
@@ -0,0 +1,21 @@
+;; these are macros; this module should be imported
+;; using import-macros
+
+;; e.g. (import-macros { : expect= } :anoia.assert)
+
+
+(fn expect [assertion]
+ (let [msg (.. "expectation failed: " (view assertion))]
+ `(when (not ,assertion)
+ (assert false ,msg))))
+
+(fn expect= [actual expected]
+ `(let [view# (. (require :fennel) :view)
+ ve# (view# ,expected)
+ va# (view# ,actual)]
+ (when (not (= ve# va#))
+ (assert false
+ (.. "\nexpected " ve# "\ngot " va#)
+ ))))
+
+{ : expect : expect= }
diff --git a/pkgs/anoia/default.nix b/pkgs/anoia/default.nix
@@ -10,11 +10,8 @@ in stdenv.mkDerivation {
src = ./.;
nativeBuildInputs = [ fennel ];
buildInputs = with lua.pkgs; [ luafilesystem ];
- buildPhase = ''
- for f in *.fnl ; do
- fennel --compile $f > `basename $f .fnl`.lua
- done
- '';
+ doCheck = true;
+ checkPhase = "make test";
installPhase = ''
mkdir -p "$out/share/lua/${lua.luaversion}/${pname}"
cp *.lua "$out/share/lua/${lua.luaversion}/${pname}"
diff --git a/pkgs/anoia/test.fnl b/pkgs/anoia/test.fnl
@@ -1,9 +1,10 @@
(local { : hash : base64url } (require :anoia))
+(import-macros { : expect= } :anoia.assert)
-(assert (= (hash "") 5381))
+(expect= (hash "") 5381)
;; these examples from https://theartincode.stanis.me/008-djb2/
-(assert (= (hash "Hello") 210676686969))
-(assert (= (hash "Hello!") 6952330670010))
+(expect= (hash "Hello") 210676686969)
+(expect= (hash "Hello!") 6952330670010)
-(assert (= (base64url "hello world") "aGVsbG8gd29ybGQ"))
+(expect= (base64url "hello world") "aGVsbG8gd29ybGQ")