mirror of
https://github.com/NixOS/nix.git
synced 2025-11-17 16:02:43 +01:00
* Normalisation.
This commit is contained in:
parent
3ec5252582
commit
d4c3edfaba
3 changed files with 233 additions and 46 deletions
66
src/test.cc
66
src/test.cc
|
|
@ -11,13 +11,27 @@
|
|||
#include "globals.hh"
|
||||
|
||||
|
||||
void evalTest(Expr e)
|
||||
typedef Expr (* Normaliser) (Expr);
|
||||
|
||||
|
||||
void eval(Normaliser n, Expr e)
|
||||
{
|
||||
e = evalValue(e);
|
||||
e = n(e);
|
||||
cout << (string) hashExpr(e) << ": " << printExpr(e) << endl;
|
||||
}
|
||||
|
||||
|
||||
void evalFail(Normaliser n, Expr e)
|
||||
{
|
||||
try {
|
||||
e = n(e);
|
||||
abort();
|
||||
} catch (Error e) {
|
||||
cout << "error (expected): " << e.what() << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct MySink : DumpSink
|
||||
{
|
||||
virtual void operator () (const unsigned char * data, unsigned int len)
|
||||
|
|
@ -90,19 +104,48 @@ void runTests()
|
|||
|
||||
/* Expression evaluation. */
|
||||
|
||||
evalTest(ATmake("Str(\"Hello World\")"));
|
||||
evalTest(ATmake("Bool(True)"));
|
||||
evalTest(ATmake("Bool(False)"));
|
||||
evalTest(ATmake("App(Lam(\"x\", Var(\"x\")), Str(\"Hello World\"))"));
|
||||
evalTest(ATmake("App(App(Lam(\"x\", Lam(\"y\", Var(\"x\"))), Str(\"Hello World\")), Str(\"Hallo Wereld\"))"));
|
||||
evalTest(ATmake("App(Lam(\"sys\", Lam(\"x\", [Var(\"x\"), Var(\"sys\")])), Str(\"i686-suse-linux\"))"));
|
||||
eval(whNormalise,
|
||||
ATmake("Str(\"Hello World\")"));
|
||||
eval(whNormalise,
|
||||
ATmake("Bool(True)"));
|
||||
eval(whNormalise,
|
||||
ATmake("Bool(False)"));
|
||||
eval(whNormalise,
|
||||
ATmake("App(Lam(\"x\", Var(\"x\")), Str(\"Hello World\"))"));
|
||||
eval(whNormalise,
|
||||
ATmake("App(App(Lam(\"x\", Lam(\"y\", Var(\"x\"))), Str(\"Hello World\")), Str(\"Hallo Wereld\"))"));
|
||||
eval(whNormalise,
|
||||
ATmake("App(Lam(\"sys\", Lam(\"x\", [Var(\"x\"), Var(\"sys\")])), Str(\"i686-suse-linux\"))"));
|
||||
|
||||
evalFail(whNormalise,
|
||||
ATmake("Foo(123)"));
|
||||
|
||||
string builder1fn = absPath("./test-builder-1.sh");
|
||||
Hash builder1h = hashFile(builder1fn);
|
||||
|
||||
string fn1 = nixValues + "/builder-1.sh";
|
||||
Expr e1 = ATmake("File(<str>, ExtFile(<str>, <str>), [])",
|
||||
fn1.c_str(),
|
||||
builder1h.c_str(),
|
||||
builder1fn.c_str());
|
||||
eval(fNormalise, e1);
|
||||
|
||||
string fn2 = nixValues + "/refer.txt";
|
||||
Expr e2 = ATmake("File(<str>, Regular(<str>), [<term>])",
|
||||
fn2.c_str(),
|
||||
("I refer to " + fn1).c_str(),
|
||||
e1);
|
||||
eval(fNormalise, e2);
|
||||
|
||||
realise(e2);
|
||||
|
||||
#if 0
|
||||
Hash builder1 = addValue("./test-builder-1.sh");
|
||||
|
||||
Expr e1 = ATmake("Exec(Str(<str>), Hash(<str>), [])",
|
||||
thisSystem.c_str(), ((string) builder1).c_str());
|
||||
|
||||
evalTest(e1);
|
||||
eval(e1);
|
||||
|
||||
Hash builder2 = addValue("./test-builder-2.sh");
|
||||
|
||||
|
|
@ -110,14 +153,15 @@ void runTests()
|
|||
"Exec(Str(<str>), Hash(<str>), [Tup(Str(\"src\"), <term>)])",
|
||||
thisSystem.c_str(), ((string) builder2).c_str(), e1);
|
||||
|
||||
evalTest(e2);
|
||||
eval(e2);
|
||||
|
||||
Hash h3 = addValue("./test-expr-1.nix");
|
||||
Expr e3 = ATmake("Deref(Hash(<str>))", ((string) h3).c_str());
|
||||
|
||||
evalTest(e3);
|
||||
eval(e3);
|
||||
|
||||
deleteValue(h3);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue