aboutsummaryrefslogtreecommitdiff
path: root/src/tests.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/tests.ts42
1 files changed, 40 insertions, 2 deletions
diff --git a/src/tests.ts b/src/tests.ts
index 8c379e8..b4fc214 100644
--- a/src/tests.ts
+++ b/src/tests.ts
@@ -1,6 +1,7 @@
-import { Add, ApplyRewrite, Commutativity, Flip, Identity } from './index';
+import { Add, Assoc0, Commutativity, Identity } from './index';
+import { ApplyRewrite, ChainRewrites, Flip } from './util';
-type Eq<a, b> = ([a] extends [b] ? ([b] extends [a] ? true : false) : false) & { a: a; b: b };
+type Eq<a, b> = ([a] extends [b] ? ([b] extends [a] ? true : false & { a: a; b: b }) : false & { a: a; b: b });
type assert<T extends true> = T;
export type _testCases = {
@@ -22,6 +23,7 @@ export type _testCases = {
Add<'A', Add<'B', 'C'>>
>>,
],
+
Commutativity: [
assert<Eq<
ApplyRewrite<Add<'A', 'B'>, Commutativity<'A', 'B'>>,
@@ -36,4 +38,40 @@ export type _testCases = {
Add<'A', Add<'C', 'B'>>
>>,
],
+
+ ChainRewrites: [
+ assert<Eq<
+ ChainRewrites<
+ [
+ Commutativity<'0', 'B'>,
+ Identity<'B'>,
+ ],
+ Add<Add<'0', 'B'>, 'C'>
+ >,
+ Add<'B', 'C'>
+ >>,
+ assert<Eq<
+ ChainRewrites<
+ [
+ Commutativity<'0', 'B'>,
+ Identity<'B'>,
+ Flip<Identity<Add<'B', 'C'>>>,
+ Commutativity<Add<'B', 'C'>, '0'>,
+ ],
+ Add<Add<'0', 'B'>, 'C'>
+ >,
+ Add<'0', Add<'B', 'C'>>
+ >>,
+ ],
+
+ Assoc0: [
+ assert<Eq<
+ ApplyRewrite<Add<Add<'0', 'B'>, 'C'>, Assoc0<'B', 'C'>>,
+ Add<'0', Add<'B', 'C'>>
+ >>,
+ assert<Eq<
+ ApplyRewrite<Add<Add<'0', Add<'A', 'B'>>, 'C'>, Assoc0<Add<'A', 'B'>, 'C'>>,
+ Add<'0', Add<Add<'A', 'B'>, 'C'>>
+ >>,
+ ],
};