public void InstantiationAndProperties()
        {
            MidEqualsBinaryOperator ee = new MidEqualsBinaryOperator();

            Assert.IsNull(ee.ValueExpression);
            Assert.IsNull(ee.MessageExpression);
            Assert.IsTrue(ee.StartIndex == 0);
            Assert.IsTrue(ee.Length == 0);

            BinaryConstantExpression bce = new BinaryConstantExpression("202030302020");
            MessageExpression        me  = new MessageExpression(3);

            ee = new MidEqualsBinaryOperator(me, bce, 0, 3);

            Assert.IsTrue(ee.ValueExpression == bce);
            Assert.IsTrue(ee.MessageExpression == me);
            Assert.IsTrue(ee.StartIndex == 0);
            Assert.IsTrue(ee.Length == 3);

            ee.ValueExpression   = null;
            ee.MessageExpression = null;
            ee.StartIndex        = 1;
            ee.Length            = 2;

            Assert.IsNull(ee.ValueExpression);
            Assert.IsNull(ee.MessageExpression);
            Assert.IsTrue(ee.StartIndex == 1);
            Assert.IsTrue(ee.Length == 2);

            try {
                ee.ValueExpression = new StringConstantExpression("Test");
                Assert.Fail();
            }
            catch (ArgumentException) {
            }

            try {
                ee = new MidEqualsBinaryOperator(me, bce, -1, 3);
                Assert.Fail();
            }
            catch (ArgumentException) {
            }

            try {
                ee = new MidEqualsBinaryOperator(me, bce, 0, -1);
                Assert.Fail();
            }
            catch (ArgumentException) {
            }

            try {
                ee.StartIndex = -1;
                Assert.Fail();
            }
            catch (ArgumentException) {
            }

            try {
                ee.Length = -1;
                Assert.Fail();
            }
            catch (ArgumentException) {
            }
        }
        public void Evaluate()
        {
            ParserContext    pc = new ParserContext(ParserContext.DefaultBufferSize);
            FormatterContext fc = new FormatterContext(FormatterContext.DefaultBufferSize);

            MidEqualsBinaryOperator ee = new MidEqualsBinaryOperator(
                new MessageExpression(1), new BinaryConstantExpression(null), 0, 1);

            Message msg = new Message();

            msg.Fields.Add(new BinaryField(1, null));

            // Both values are null.
            pc.CurrentMessage = msg;
            Assert.IsTrue(ee.EvaluateParse(ref pc));
            fc.CurrentMessage = msg;
            Assert.IsTrue(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));

            ee = new MidEqualsBinaryOperator(
                new MessageExpression(1), new BinaryConstantExpression("1520253035404550"), 0, 1);
            // Field value is null.
            Assert.IsFalse(ee.EvaluateParse(ref pc));
            Assert.IsFalse(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));

            ee = new MidEqualsBinaryOperator(
                new MessageExpression(52), new BinaryConstantExpression(null), 0, 1);
            msg = MessagesProvider.GetMessage();
            // Constant is null.
            pc.CurrentMessage = msg;
            Assert.IsFalse(ee.EvaluateParse(ref pc));
            fc.CurrentMessage = msg;
            Assert.IsFalse(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));

            ee = new MidEqualsBinaryOperator(
                new MessageExpression(52), new BinaryConstantExpression("152025303540"), 0, 1);
            // Different lengths.
            Assert.IsFalse(ee.EvaluateParse(ref pc));
            Assert.IsFalse(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));

            ee = new MidEqualsBinaryOperator(
                new MessageExpression(52), new BinaryConstantExpression("1520253035404551"), 0, 1);
            // Different data.
            Assert.IsFalse(ee.EvaluateParse(ref pc));
            Assert.IsFalse(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));

            ee = new MidEqualsBinaryOperator(
                new MessageExpression(52), new BinaryConstantExpression("1520253035"), 0, 5);
            // Equals.
            Assert.IsTrue(ee.EvaluateParse(ref pc));
            Assert.IsTrue(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));

            // The start index of the set of bytes is greater than the field value length
            ee = new MidEqualsBinaryOperator(
                new MessageExpression(52), new BinaryConstantExpression("1520253035"), 8, 5);
            try {
                Assert.IsTrue(ee.EvaluateParse(ref pc));
                Assert.Fail();
            }
            catch (ExpressionEvaluationException) {
            }
            try {
                Assert.IsTrue(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));
                Assert.Fail();
            }
            catch (ExpressionEvaluationException) {
            }

            // There isn't enough data in the field value to get a subset of bytes
            ee = new MidEqualsBinaryOperator(
                new MessageExpression(52), new BinaryConstantExpression("1520253035"), 6, 5);
            try {
                Assert.IsTrue(ee.EvaluateParse(ref pc));
                Assert.Fail();
            }
            catch (ExpressionEvaluationException) {
            }
            try {
                Assert.IsTrue(ee.EvaluateFormat(new StringField(3, "000000"), ref fc));
                Assert.Fail();
            }
            catch (ExpressionEvaluationException) {
            }
        }