Example #1
0
        public void AddExportNames()
        {
            Module module = new Module(null);

            Assert.IsNotNull(module.ExportNames);
            Assert.AreEqual(0, module.ExportNames.Count);

            module.AddExportNames(new string[] { "foo/1", "foo/2" });

            Assert.AreEqual(2, module.ExportNames.Count);
            Assert.IsTrue(module.ExportNames.Contains("foo/1"));
            Assert.IsTrue(module.ExportNames.Contains("foo/2"));

            module.AddExportNames(new string[] { "foo/2", "bar/1" });

            Assert.AreEqual(3, module.ExportNames.Count);
            Assert.IsTrue(module.ExportNames.Contains("foo/1"));
            Assert.IsTrue(module.ExportNames.Contains("foo/2"));
            Assert.IsTrue(module.ExportNames.Contains("bar/1"));
        }
        public void EvaluateQualifiedCallExpression()
        {
            Context context = new Context();
            Module module = new Module(null);
            context.SetValue("mod", module);
            Function function = new Function(context, new object[] { new Variable("X"), new Variable("Y") }, new AddExpression(new VariableExpression(new Variable("X")), new VariableExpression(new Variable("Y"))));
            module.Context.SetValue("add/2", function);
            module.AddExportNames(new string[] { "add/2" });
            QualifiedCallExpression expr = new QualifiedCallExpression(new AtomExpression(new Atom("mod")), new AtomExpression(new Atom("add")), new IExpression[] { new ConstantExpression(1), new ConstantExpression(2) });

            Assert.IsFalse(expr.HasVariable());
            Assert.IsNotNull(expr.ModuleExpression);
            Assert.IsInstanceOfType(expr.ModuleExpression, typeof(AtomExpression));
            Assert.IsNotNull(expr.NameExpression);
            Assert.IsInstanceOfType(expr.NameExpression, typeof(AtomExpression));
            Assert.IsNotNull(expr.ArgumentExpressions);
            Assert.AreEqual(2, expr.ArgumentExpressions.Count);

            Assert.AreEqual(3, expr.Evaluate(context));
        }