Exemplo n.º 1
0
        public void ErlListTest()
        {
            var l = new ErlList("test", 1, 1.1, true, (byte)255, 'x', new ErlAtom("a"));
              var r = new ErlList("test", 1, 1.1, true, (byte)255, 'x', new ErlAtom("a"));

              Assert.AreEqual(7, l.Count);
              Assert.AreEqual(ErlTypeOrder.ErlString, l[0].TypeOrder);
              Assert.AreEqual("test", l[0].ValueAsString);
              Assert.AreEqual(ErlTypeOrder.ErlLong, l[1].TypeOrder);
              Assert.AreEqual(1, l[1].ValueAsInt);
              Assert.AreEqual(ErlTypeOrder.ErlDouble, l[2].TypeOrder);
              Assert.AreEqual(1.1, l[2].ValueAsDouble);
              Assert.AreEqual(ErlTypeOrder.ErlBoolean, l[3].TypeOrder);
              Assert.AreEqual(true, l[3].ValueAsBool);
              Assert.AreEqual(ErlTypeOrder.ErlByte, l[4].TypeOrder);
              Assert.AreEqual(255, l[4].ValueAsInt);
              Assert.AreEqual(ErlTypeOrder.ErlByte, l[5].TypeOrder);
              Assert.AreEqual('x', l[5].ValueAsChar);
              Assert.AreEqual(ErlTypeOrder.ErlAtom, l[6].TypeOrder);
              Assert.AreEqual("a", l[6].ValueAsString);

              Assert.IsTrue(l.Matches(r));
              Assert.AreEqual(new ErlVarBind(), l.Match(r));

              Assert.AreEqual(l, r);
              Assert.IsTrue(l.Equals(r));
              Assert.AreEqual("[\"test\",1,1.1,true,255,120,a]", l.ToString());
              Assert.IsFalse(l.IsScalar);
              Assert.AreEqual(ErlTypeOrder.ErlList, l.TypeOrder);

              IErlObject temp = null;
              Assert.IsFalse(l.Subst(ref temp, new ErlVarBind()));
              Assert.IsTrue(new ErlList(new ErlVar(X), true, 1).Subst(ref temp, new ErlVarBind { { X, new ErlLong(10) } }));
              Assert.AreEqual("[10,true,1]", temp.ToString());

              Assert.AreEqual(1, l.Visit(0, (acc, o) => acc + (o is ErlAtom ? 1 : 0)));

              var d = new DateTime(2013, 1, 2);
              var ts = new TimeSpan(1, 2, 3);

              Assert.DoesNotThrow(() => { var x = l.ValueAsObject; });
              Assert.AreEqual(1, new ErlList("1")[0].ValueAsInt);
              Assert.AreEqual(1, new ErlList("1")[0].ValueAsLong);
              Assert.AreEqual(1, new ErlList("1")[0].ValueAsDecimal);
              Assert.AreEqual(d, new ErlList(d.ToString())[0].ValueAsDateTime);
              Assert.AreEqual(ts, new ErlList(ts.ToString())[0].ValueAsTimeSpan);
              Assert.AreEqual(1.0, new ErlList("1.0")[0].ValueAsDouble);
              Assert.AreEqual("a", new ErlList("a")[0].ValueAsString);
              Assert.IsTrue(new ErlList("true")[0].ValueAsBool);
              Assert.IsFalse(new ErlList("xxxx")[0].ValueAsBool);

              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsInt; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsLong; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsDecimal; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsDateTime; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsTimeSpan; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsDouble; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsString; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsBool; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsChar; });
              Assert.Throws<ErlIncompatibleTypesException>(() => { var x = l.ValueAsByteArray; });

              List<IErlObject> s = l;
              Assert.AreEqual(l.Value, s);
              Assert.IsFalse(new ErlTuple(1, 1.0, "a").Equals(new ErlList(1, 1.0, "a")));
              Assert.IsFalse(new ErlTuple(1, 1.0, "a") == new ErlList(1, 1.0, "a"));
        }