add nix-unit tests
This commit is contained in:
parent
e31dc6dea8
commit
14f30ce5d7
2 changed files with 129 additions and 0 deletions
47
tests/default.nix
Normal file
47
tests/default.nix
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
let
|
||||
bootstrap = import ../nt/primitives/bootstrap;
|
||||
|
||||
nt = import ../nt {
|
||||
mix = import ../nt/mix {
|
||||
this = bootstrap;
|
||||
};
|
||||
# flake.nix passes `flake = inputs.self`
|
||||
flake = builtins.getFlake ../.;
|
||||
};
|
||||
|
||||
dummyTest = {
|
||||
expr = 1;
|
||||
expected = 1;
|
||||
};
|
||||
in {
|
||||
testPass = dummyTest;
|
||||
|
||||
testMaybe = let
|
||||
maybe-mod = import ./maybe.nix {this = bootstrap;};
|
||||
|
||||
inherit
|
||||
(maybe-mod)
|
||||
Maybe
|
||||
Some
|
||||
None
|
||||
;
|
||||
in {
|
||||
expr = Some true;
|
||||
expected = {
|
||||
_''traps''_ = {
|
||||
_'nt = {
|
||||
derive = ["nt::&Maybe"];
|
||||
instance = true;
|
||||
ops = {
|
||||
"nt::&Maybe" = {
|
||||
unwrap = f: self: f self.${bootstrap.ntDynamicTrapdoorKey}.value;
|
||||
};
|
||||
};
|
||||
req = {};
|
||||
sig = "nt::Some";
|
||||
};
|
||||
_'ntDyn = {value = true;};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
82
tests/maybe.nix
Normal file
82
tests/maybe.nix
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
{this, ...}: let
|
||||
inherit
|
||||
(this)
|
||||
ntTrapdoorKey
|
||||
ntDynamicTrapdoorKey
|
||||
;
|
||||
|
||||
inherit
|
||||
(this.std)
|
||||
enfImpls
|
||||
;
|
||||
|
||||
inherit
|
||||
(this.trapdoor)
|
||||
mkTrapdoorFn
|
||||
mkTrapdoorSet
|
||||
openTrapdoor
|
||||
;
|
||||
in {
|
||||
# NOTE: Maybe is used to simplify parsing Type/Class declarations
|
||||
# NOTE: and therefore must be implemented manually
|
||||
Maybe = let
|
||||
meta = instance: {
|
||||
sig = "nt::&Maybe";
|
||||
derive = [];
|
||||
ops = {};
|
||||
req = {"nt::&Maybe" = ["unwrap"];};
|
||||
};
|
||||
in
|
||||
mkTrapdoorFn {
|
||||
default = {
|
||||
unwrap = T:
|
||||
assert enfImpls "nt::&Maybe" T "nt::&Maybe.unwrap";
|
||||
(T |> openTrapdoor ntTrapdoorKey).ops."nt::&Maybe".unwrap;
|
||||
};
|
||||
unlock.${ntTrapdoorKey} = meta false;
|
||||
};
|
||||
|
||||
Some = let
|
||||
meta = instance: {
|
||||
inherit instance;
|
||||
sig = "nt::Some";
|
||||
derive = ["nt::&Maybe"];
|
||||
ops = {
|
||||
"nt::&Maybe".unwrap = f: self: f self.${ntDynamicTrapdoorKey}.value;
|
||||
};
|
||||
req = {};
|
||||
};
|
||||
in
|
||||
mkTrapdoorFn {
|
||||
default = value:
|
||||
mkTrapdoorSet {
|
||||
default = {};
|
||||
unlock = {
|
||||
${ntTrapdoorKey} = meta true;
|
||||
${ntDynamicTrapdoorKey} = {
|
||||
inherit value;
|
||||
};
|
||||
};
|
||||
};
|
||||
unlock.${ntTrapdoorKey} = meta false;
|
||||
};
|
||||
|
||||
None = let
|
||||
meta = instance: {
|
||||
inherit instance;
|
||||
sig = "nt::None";
|
||||
derive = ["nt::&Maybe"];
|
||||
ops = {
|
||||
"nt::&Maybe".map = f: self: self;
|
||||
};
|
||||
req = {};
|
||||
};
|
||||
in
|
||||
mkTrapdoorFn {
|
||||
default = mkTrapdoorSet ntTrapdoorKey {
|
||||
default = {};
|
||||
unlock = meta true;
|
||||
};
|
||||
unlock.${ntTrapdoorKey} = meta false;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue