From a10dff1307631cad7981b83e8276f1d0cdbc5b18 Mon Sep 17 00:00:00 2001 From: Pekka Laiho Date: Thu, 17 Dec 2020 21:32:37 +0700 Subject: [PATCH] unit tests for Func and UserFunc --- test/FuncTest.php | 37 +++++++++++++++++++++++++++++++++++++ test/UserFuncTest.php | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 test/FuncTest.php create mode 100644 test/UserFuncTest.php diff --git a/test/FuncTest.php b/test/FuncTest.php new file mode 100644 index 0000000..d660c71 --- /dev/null +++ b/test/FuncTest.php @@ -0,0 +1,37 @@ + $a + $b; + $ast = new MList(); + $env = new Env("env"); + $bindings = new MList(); + + $fn = new UserFunc($closure, $ast, $env, $bindings, false); + + $this->assertSame($closure, $fn->getClosure()); + + // test docstrings + $this->assertNull($fn->getDoc()); + $fn->setDoc('docstring'); + $this->assertSame('docstring', $fn->getDoc()); + + // test isMacro + $this->assertFalse($fn->isMacro()); + $fn = new UserFunc($closure, $ast, $env, $bindings, true); + $this->assertTrue($fn->isMacro()); + } +} diff --git a/test/UserFuncTest.php b/test/UserFuncTest.php new file mode 100644 index 0000000..d5ff42b --- /dev/null +++ b/test/UserFuncTest.php @@ -0,0 +1,36 @@ + $a + $b; + $ast = new MList(); + $env = new Env("env"); + $bindings = new MList([new Symbol('a'), new Symbol('b')]); + + $fn = new UserFunc($closure, $ast, $env, $bindings, false); + + $this->assertSame($ast, $fn->getAst()); + $this->assertSame($bindings, $fn->getBindings()); + + $newEnv = $fn->getEnv([1, 2]); + $this->assertInstanceOf(Env::class, $newEnv); + $this->assertSame(['a' => 1, 'b' => 2], $newEnv->getData()); + + $result = $fn->call([1, 2]); + $this->assertSame(3, $result); + } +}