From 96ce863f7f2f3e48d6c1ca42d890cbd65f1399b2 Mon Sep 17 00:00:00 2001 From: rowan Date: Wed, 26 Mar 2025 19:34:45 -0500 Subject: [PATCH] initial commit --- package.json | 12 ++++++++++++ src/index.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 package.json create mode 100644 src/index.js diff --git a/package.json b/package.json new file mode 100644 index 0000000..faa9200 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "folktest", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..d98713b --- /dev/null +++ b/src/index.js @@ -0,0 +1,48 @@ +export class AssertionError extends Error { + constructor(message) { + super(message) + } +} + +export const assert = (value, message = `assertion error: ${value} is not true`) => { + assertEq(value, true, message) +} + +export const assertEq = (a, b, message = `assertion error: ${a} !== ${b}`) => { + if (a === b) { + return + } + else if (Array.isArray(b) && a.length === b.length) { + b.forEach((n, i) => assertEq(a[i], n)) + return + } else { + throw new AssertionError(message) + } +} + +export const assertCallback = () => { + let result = false + setTimeout(() => assert(result), 0) + return () => result = true +} + +export const it = (description, test) => { + return () => { + try { + test() + + return { + success: true, + description, + error: undefined + } + } catch (error) { + return { + success: false, + description, + error + } + } + } +} +