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)); }
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()); } }