コード例 #1
0
        public bool?Equal(object x, object y, ref Tolerance tolerance, ComparisonState state)
        {
            if (!(x is IEnumerable xIEnumerable) || !(y is IEnumerable yIEnumerable))
            {
                return(null);
            }

            var expectedEnum = xIEnumerable.GetEnumerator();

            using (expectedEnum as IDisposable)
            {
                var actualEnum = yIEnumerable.GetEnumerator();
                using (actualEnum as IDisposable)
                {
                    for (int count = 0; ; count++)
                    {
                        bool expectedHasData = expectedEnum.MoveNext();
                        bool actualHasData   = actualEnum.MoveNext();

                        if (!expectedHasData && !actualHasData)
                        {
                            return(true);
                        }

                        if (expectedHasData != actualHasData ||
                            !_equalityComparer.AreEqual(expectedEnum.Current, actualEnum.Current, ref tolerance, state.PushComparison(x, y)))
                        {
                            NUnitEqualityComparer.FailurePoint fp = new NUnitEqualityComparer.FailurePoint();
                            fp.Position        = count;
                            fp.ExpectedHasData = expectedHasData;
                            if (expectedHasData)
                            {
                                fp.ExpectedValue = expectedEnum.Current;
                            }
                            fp.ActualHasData = actualHasData;
                            if (actualHasData)
                            {
                                fp.ActualValue = actualEnum.Current;
                            }
                            _equalityComparer.FailurePoints.Insert(0, fp);
                            return(false);
                        }
                    }
                }
            }
        }
コード例 #2
0
        public bool?Equal(object x, object y, ref Tolerance tolerance, bool topLevelComparison = true)
        {
            if (!(x is IEnumerable) || !(y is IEnumerable))
            {
                return(null);
            }

            IEnumerable xIEnumerable = (IEnumerable)x;
            IEnumerable yIEnumerable = (IEnumerable)y;

            IEnumerator expectedEnum = null;
            IEnumerator actualEnum   = null;

            try
            {
                expectedEnum = xIEnumerable.GetEnumerator();
                actualEnum   = yIEnumerable.GetEnumerator();

                int count;
                for (count = 0; ; count++)
                {
                    bool expectedHasData = expectedEnum.MoveNext();
                    bool actualHasData   = actualEnum.MoveNext();

                    if (!expectedHasData && !actualHasData)
                    {
                        return(true);
                    }

                    if (expectedHasData != actualHasData ||
                        !_equalityComparer.AreEqual(expectedEnum.Current, actualEnum.Current, ref tolerance, topLevelComparison: false))
                    {
                        NUnitEqualityComparer.FailurePoint fp = new NUnitEqualityComparer.FailurePoint();
                        fp.Position        = count;
                        fp.ExpectedHasData = expectedHasData;
                        if (expectedHasData)
                        {
                            fp.ExpectedValue = expectedEnum.Current;
                        }
                        fp.ActualHasData = actualHasData;
                        if (actualHasData)
                        {
                            fp.ActualValue = actualEnum.Current;
                        }
                        _equalityComparer.FailurePoints.Insert(0, fp);
                        return(false);
                    }
                }
            }
            finally
            {
                var expectedDisposable = expectedEnum as IDisposable;
                if (expectedDisposable != null)
                {
                    expectedDisposable.Dispose();
                }

                var actualDisposable = actualEnum as IDisposable;
                if (actualDisposable != null)
                {
                    actualDisposable.Dispose();
                }
            }
        }
コード例 #3
0
        public bool?Equal(object x, object y, ref Tolerance tolerance, ComparisonState state)
        {
            if (!(x is Stream) || !(y is Stream))
            {
                return(null);
            }

            Stream xStream = (Stream)x;
            Stream yStream = (Stream)y;

            if (xStream == yStream)
            {
                return(true);
            }

            if (!xStream.CanRead)
            {
                throw new ArgumentException("Stream is not readable", "expected");
            }
            if (!yStream.CanRead)
            {
                throw new ArgumentException("Stream is not readable", "actual");
            }
            if (!xStream.CanSeek)
            {
                throw new ArgumentException("Stream is not seekable", "expected");
            }
            if (!yStream.CanSeek)
            {
                throw new ArgumentException("Stream is not seekable", "actual");
            }

            if (xStream.Length != yStream.Length)
            {
                return(false);
            }

            byte[] bufferExpected = new byte[BUFFER_SIZE];
            byte[] bufferActual   = new byte[BUFFER_SIZE];

            BinaryReader binaryReaderExpected = new BinaryReader(xStream);
            BinaryReader binaryReaderActual   = new BinaryReader(yStream);

            long expectedPosition = xStream.Position;
            long actualPosition   = yStream.Position;

            try
            {
                binaryReaderExpected.BaseStream.Seek(0, SeekOrigin.Begin);
                binaryReaderActual.BaseStream.Seek(0, SeekOrigin.Begin);

                for (long readByte = 0; readByte < xStream.Length; readByte += BUFFER_SIZE)
                {
                    binaryReaderExpected.Read(bufferExpected, 0, BUFFER_SIZE);
                    binaryReaderActual.Read(bufferActual, 0, BUFFER_SIZE);

                    for (int count = 0; count < BUFFER_SIZE; ++count)
                    {
                        if (bufferExpected[count] != bufferActual[count])
                        {
                            NUnitEqualityComparer.FailurePoint fp = new NUnitEqualityComparer.FailurePoint();
                            fp.Position        = readByte + count;
                            fp.ExpectedHasData = true;
                            fp.ExpectedValue   = bufferExpected[count];
                            fp.ActualHasData   = true;
                            fp.ActualValue     = bufferActual[count];
                            _equalityComparer.FailurePoints.Insert(0, fp);
                            return(false);
                        }
                    }
                }
            }
            finally
            {
                xStream.Position = expectedPosition;
                yStream.Position = actualPosition;
            }

            return(true);
        }