Exemplo n.º 1
0
        private static bool TryBind(string code, ErlangValue value)
        {
            var frame        = new ErlangStackFrame("test", "test", 0);
            var expression   = ErlangSyntaxNode.ParseExpression(new TokenBuffer(ErlangToken.Tokenize(new TextBuffer(code))));
            var compiledExpr = ErlangExpression.Compile(expression);

            return(ErlangBinder.TryBindParameter(compiledExpr, value, frame));
        }
Exemplo n.º 2
0
        public void NumericComparisons()
        {
            // less
            Assert.True(new ErlangNumber(0.8) < new ErlangNumber(0.9), "less double");
            Assert.True(new ErlangNumber(1) < new ErlangNumber(2), "less int");
            Assert.True(new ErlangNumber(0.9) < new ErlangNumber(1), "less double int");
            Assert.True(new ErlangNumber(1) < new ErlangNumber(1.1), "less int double");

            // less equal
            Assert.True(new ErlangNumber(0.8) <= new ErlangNumber(0.8), "less equal double 1");
            Assert.True(new ErlangNumber(0.8) <= new ErlangNumber(0.9), "less equal double 2");
            Assert.True(new ErlangNumber(1) <= new ErlangNumber(1), "less equal int 1");
            Assert.True(new ErlangNumber(1) <= new ErlangNumber(2), "less equal int 2");
            Assert.True(new ErlangNumber(1.0) <= new ErlangNumber(1), "less equal double int 1");
            Assert.True(new ErlangNumber(0.9) <= new ErlangNumber(1), "less equal double int 2");
            Assert.True(new ErlangNumber(1) <= new ErlangNumber(1.0), "less equal int double 1");
            Assert.True(new ErlangNumber(1) <= new ErlangNumber(1.1), "less equal int double 2");

            // greater
            Assert.True(new ErlangNumber(0.9) > new ErlangNumber(0.8), "greater double");
            Assert.True(new ErlangNumber(2) > new ErlangNumber(1), "greater int");
            Assert.True(new ErlangNumber(1.1) > new ErlangNumber(1), "greater double int");
            Assert.True(new ErlangNumber(1) > new ErlangNumber(0.9), "greater int double");

            // greater equal
            Assert.True(new ErlangNumber(0.8) >= new ErlangNumber(0.8), "greater equal double 1");
            Assert.True(new ErlangNumber(0.9) >= new ErlangNumber(0.8), "greater equal double 2");
            Assert.True(new ErlangNumber(1) >= new ErlangNumber(1), "greater equal int 1");
            Assert.True(new ErlangNumber(2) >= new ErlangNumber(1), "greater equal int 2");
            Assert.True(new ErlangNumber(1.0) >= new ErlangNumber(1), "greater equal double int 1");
            Assert.True(new ErlangNumber(1.1) >= new ErlangNumber(1), "greater equal double int 2");
            Assert.True(new ErlangNumber(1) >= new ErlangNumber(1.0), "greater equal int double 1");
            Assert.True(new ErlangNumber(1) >= new ErlangNumber(0.9), "greater equal int double 2");

            // equal
            Assert.True(new ErlangNumber(1.0) == new ErlangNumber(1.0), "equal double");
            Assert.True(new ErlangNumber(1) == new ErlangNumber(1), "equal int");
            Assert.True(new ErlangNumber(1.0) == new ErlangNumber(1), "equal double int");
            Assert.True(new ErlangNumber(1) == new ErlangNumber(1.0), "equal int double");

            // not equal
            Assert.True(new ErlangNumber(0.8) != new ErlangNumber(0.9), "not equal double");
            Assert.True(new ErlangNumber(1) != new ErlangNumber(2), "not equal int");
            Assert.True(new ErlangNumber(1.1) != new ErlangNumber(1), "not equal double int");
            Assert.True(new ErlangNumber(1) != new ErlangNumber(1.1), "not equal int double");

            // exactly equal
            Assert.Equal(ErlangAtom.True, ErlangValue.EqualsColonEquals(new ErlangNumber(1.0), new ErlangNumber(1.0))); // double
            Assert.Equal(ErlangAtom.True, ErlangValue.EqualsColonEquals(new ErlangNumber(1), new ErlangNumber(1)));     // int
            Assert.Equal(ErlangAtom.False, ErlangValue.EqualsColonEquals(new ErlangNumber(1.0), new ErlangNumber(1)));  // double int
            Assert.Equal(ErlangAtom.False, ErlangValue.EqualsColonEquals(new ErlangNumber(1), new ErlangNumber(1.0)));  // int double

            // exactly not equal
            Assert.Equal(ErlangAtom.False, ErlangValue.EqualsSlashEquals(new ErlangNumber(1.0), new ErlangNumber(1.0))); // double
            Assert.Equal(ErlangAtom.False, ErlangValue.EqualsSlashEquals(new ErlangNumber(1), new ErlangNumber(1)));     // int
            Assert.Equal(ErlangAtom.True, ErlangValue.EqualsSlashEquals(new ErlangNumber(1.0), new ErlangNumber(1)));    // double int
            Assert.Equal(ErlangAtom.True, ErlangValue.EqualsSlashEquals(new ErlangNumber(1), new ErlangNumber(1.0)));    // int double
        }
Exemplo n.º 3
0
        private static ErlangValue BindAndFetchVariable(string code, ErlangValue valueToBind, string variable)
        {
            var frame        = new ErlangStackFrame("test", "test", 0);
            var expression   = ErlangSyntaxNode.ParseExpression(new TokenBuffer(ErlangToken.Tokenize(new TextBuffer(code))));
            var compiledExpr = ErlangExpression.Compile(expression);

            Assert.True(ErlangBinder.TryBindParameter(compiledExpr, valueToBind, frame), $"Failure binding to '{code}'.");
            return(frame.GetVariable(variable));
        }
Exemplo n.º 4
0
        public void UnaryOperators()
        {
            // not
            Assert.Equal(ErlangAtom.True, ErlangValue.Not(ErlangAtom.False));
            Assert.Equal(ErlangAtom.True, ErlangValue.Not(ErlangValue.Not(ErlangAtom.True)));

            // bnot
            Assert.Equal(new ErlangNumber(-17), ErlangNumber.BNot(new ErlangNumber(16)));
            Assert.Equal(new ErlangNumber(16), ErlangNumber.BNot(new ErlangNumber(-17)));
            Assert.Equal(new ErlangNumber(-1), ErlangNumber.BNot(new ErlangNumber(0)));
            Assert.Equal(new ErlangNumber(0), ErlangNumber.BNot(new ErlangNumber(-1)));
        }