Example #1
0
        public void TestFormatVariable()
        {
            var cases = new Dictionary <string, Erlang.TermType> {
                { "B", Erlang.TermType.Object },
                { "B::int()", Erlang.TermType.Int },
                { "B::integer()", Erlang.TermType.Int },
                { "B::string()", Erlang.TermType.String },
                { "B::atom()", Erlang.TermType.Atom },
                { "B::float()", Erlang.TermType.Double },
                { "B::double()", Erlang.TermType.Double },
                { "B::binary()", Erlang.TermType.Binary },
                { "B::bool()", Erlang.TermType.Boolean },
                { "B::boolean()", Erlang.TermType.Boolean },
                { "B::byte()", Erlang.TermType.Byte },
                { "B::char()", Erlang.TermType.Char },
                { "B::list()", Erlang.TermType.List },
                { "B::tuple()", Erlang.TermType.Tuple },
                { "B::pid()", Erlang.TermType.Pid },
                { "B::ref()", Erlang.TermType.Ref },
                { "B::reference()", Erlang.TermType.Ref },
                { "B::port()", Erlang.TermType.Port }
            };

            foreach (var p in cases)
            {
                Erlang.Object o = Erlang.Object.Format(p.Key);
                Assert.IsInstanceOf(typeof(Erlang.Var), o);
                Assert.AreEqual(p.Value, o.Cast <Erlang.Var>().VarTermType);
            }

            var pat1 = Erlang.Object.Format("{A::char(), B::tuple(), C::float(), D::list(), [E::string(), F::int()], G::bool()}");
            var obj1 = Erlang.Object.Format("{$a, {1,2,3}, 10.0, [5,6], [\"abc\", 190], true}");

            var binding = new Erlang.VarBind();

            Assert.IsTrue(pat1.match(obj1, binding)); // Match unbound variables
            Assert.IsTrue(pat1.match(obj1, binding)); // Match bound variables

            var obj2 = Erlang.Object.Format("{$a, {1,2,3}, 20.0, [5,6], [\"abc\", 190], true}");

            Assert.IsFalse(pat1.match(obj2, binding)); // Match bound variables

            binding.clear();

            var obj3 = Erlang.Object.Format("{$a, {1,2,3}, 10.0, [5,6], [\"abc\", bad], false}");

            Assert.IsFalse(pat1.match(obj3, binding));
        }
Example #2
0
 public void TestFormat()
 {
     {
         Erlang.Object obj1 = Erlang.Object.Format("a");
         Assert.IsInstanceOf(typeof(Erlang.Atom), obj1);
         Assert.AreEqual("a", (obj1 as Erlang.Atom).atomValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("$a");
         Assert.IsInstanceOf(typeof(Erlang.Char), obj1);
         Assert.AreEqual('a', (obj1 as Erlang.Char).charValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("'Abc'");
         Assert.IsInstanceOf(typeof(Erlang.Atom), obj1);
         Assert.AreEqual("Abc", (obj1 as Erlang.Atom).atomValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("{'true', 'false', true, false}");
         Assert.IsInstanceOf(typeof(Erlang.Tuple), obj1);
         Erlang.Tuple t = obj1.Cast <Erlang.Tuple>();
         Assert.AreEqual(4, t.arity());
         foreach (Erlang.Object term in t.elements())
         {
             Assert.IsInstanceOf(typeof(Erlang.Boolean), term);
         }
         Assert.AreEqual(true, t[0].boolValue());
         Assert.AreEqual(false, t[1].boolValue());
         Assert.AreEqual(true, t[2].boolValue());
         Assert.AreEqual(false, t[3].boolValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("\"Abc\"");
         Assert.IsInstanceOf(typeof(Erlang.String), obj1);
         Assert.AreEqual("Abc", (obj1 as Erlang.String).stringValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("Abc");
         Assert.IsInstanceOf(typeof(Erlang.Var), obj1);
         Assert.AreEqual("Abc", (obj1 as Erlang.Var).name());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("1");
         Assert.IsInstanceOf(typeof(Erlang.Long), obj1);
         Assert.AreEqual(1, (obj1 as Erlang.Long).longValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("1.23");
         Assert.IsInstanceOf(typeof(Erlang.Double), obj1);
         Assert.AreEqual(1.23, (obj1 as Erlang.Double).doubleValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("V");
         Assert.IsInstanceOf(typeof(Erlang.Var), obj1);
         Assert.AreEqual("V", (obj1 as Erlang.Var).name());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("{1}");
         Assert.IsInstanceOf(typeof(Erlang.Tuple), obj1);
         Assert.AreEqual(1, (obj1 as Erlang.Tuple).arity());
         Assert.IsInstanceOf(typeof(Erlang.Long), (obj1 as Erlang.Tuple)[0]);
         Assert.AreEqual(1, ((obj1 as Erlang.Tuple)[0] as Erlang.Long).longValue());
     }
     {
         Erlang.Object obj0 = Erlang.Object.Format("[]");
         Assert.IsInstanceOf(typeof(Erlang.List), obj0);
         Assert.AreEqual(0, (obj0 as Erlang.List).arity());
         Erlang.Object obj1 = Erlang.Object.Format("[1]");
         Assert.IsInstanceOf(typeof(Erlang.List), obj1);
         Assert.AreEqual(1, (obj1 as Erlang.List).arity());
         Assert.IsInstanceOf(typeof(Erlang.Long), (obj1 as Erlang.List)[0]);
         Assert.AreEqual(1, ((obj1 as Erlang.List)[0] as Erlang.Long).longValue());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("[{1,2}, []]");
         Assert.IsInstanceOf(typeof(Erlang.List), obj1);
         Assert.AreEqual(2, (obj1 as Erlang.List).arity());
         Assert.IsInstanceOf(typeof(Erlang.Tuple), (obj1 as Erlang.List)[0]);
         Assert.AreEqual(2, ((obj1 as Erlang.List)[0] as Erlang.Tuple).arity());
         Assert.AreEqual(0, ((obj1 as Erlang.List)[1] as Erlang.List).arity());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("{a, [b, 1, 2.0, \"abc\"], {1, 2}}");
         Assert.IsInstanceOf(typeof(Erlang.Tuple), obj1);
         Assert.AreEqual(3, (obj1 as Erlang.Tuple).arity());
     }
     {
         Erlang.Object obj1 = Erlang.Object.Format("~w", 1);
         Assert.IsInstanceOf(typeof(Erlang.Long), obj1);
         Assert.AreEqual(1, (obj1 as Erlang.Long).longValue());
         Erlang.Object obj2 = Erlang.Object.Format("{~w, ~w,~w}", 1, 2, 3);
         Assert.IsInstanceOf(typeof(Erlang.Tuple), obj2);
         Assert.AreEqual(3, (obj2 as Erlang.Tuple).arity());
         Assert.IsInstanceOf(typeof(Erlang.Long), (obj2 as Erlang.Tuple)[0]);
         Assert.AreEqual(1, ((obj2 as Erlang.Tuple)[0] as Erlang.Long).longValue());
         Assert.IsInstanceOf(typeof(Erlang.Long), (obj2 as Erlang.Tuple)[1]);
         Assert.AreEqual(2, ((obj2 as Erlang.Tuple)[1] as Erlang.Long).longValue());
         Assert.IsInstanceOf(typeof(Erlang.Long), (obj2 as Erlang.Tuple)[2]);
         Assert.AreEqual(3, ((obj2 as Erlang.Tuple)[2] as Erlang.Long).longValue());
     }
     {
         Erlang.Object obj2 = Erlang.Object.Format("{~w, ~w,~w,~w, ~w}", 1.0, 'a', "abc", 2, true);
         Assert.IsInstanceOf(typeof(Erlang.Tuple), obj2);
         Assert.AreEqual(5, (obj2 as Erlang.Tuple).arity());
         Assert.IsInstanceOf(typeof(Erlang.Double), (obj2 as Erlang.Tuple)[0]);
         Assert.AreEqual(1.0, ((obj2 as Erlang.Tuple)[0] as Erlang.Double).doubleValue());
         Assert.IsInstanceOf(typeof(Erlang.Char), (obj2 as Erlang.Tuple)[1]);
         Assert.AreEqual('a', ((obj2 as Erlang.Tuple)[1] as Erlang.Char).charValue());
         Assert.IsInstanceOf(typeof(Erlang.String), (obj2 as Erlang.Tuple)[2]);
         Assert.AreEqual("abc", ((obj2 as Erlang.Tuple)[2] as Erlang.String).stringValue());
         Assert.IsInstanceOf(typeof(Erlang.Long), (obj2 as Erlang.Tuple)[3]);
         Assert.AreEqual(2, ((obj2 as Erlang.Tuple)[3] as Erlang.Long).longValue());
         Assert.IsInstanceOf(typeof(Erlang.Boolean), (obj2 as Erlang.Tuple)[4]);
         Assert.AreEqual(true, ((obj2 as Erlang.Tuple)[4] as Erlang.Boolean).booleanValue());
     }
 }