Пример #1
0
        public void Compare_NullAndValue_False()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare(null, "(value)");

            Assert.That(result.AreEqual, Is.False);
        }
Пример #2
0
        public void Compare_StringAndValue_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("2013-10-16", "(value)");

            Assert.That(result.AreEqual, Is.True);
        }
Пример #3
0
        public int Compare(IndexValue x, IndexValue y)
        {
            if (x.Type == y.Type)
            {
                switch (x.Type)
                {
                case IndexValueType.Null:
                    return(0);

                case IndexValueType.DateTime:
                    return(DateTimeComparer.Compare((DateTime)x.Value, (DateTime)y.Value));

                case IndexValueType.Integer:
                    return(IntegerComparer.Compare((Int32)x.Value, (Int32)y.Value));

                case IndexValueType.Number:
                    return(NumberComparer.Compare((double)x.Value, (double)y.Value));

                case IndexValueType.String:
                    return(StringComparer.Compare((string)x.Value, (string)y.Value));

                case IndexValueType.Bool:
                    return(BoolComparer.Compare((bool)x.Value, (bool)y.Value));

                default:
                    Verify.Argument(true, "Attempt to compare illegal values, {0} and {1}", x.Value, y.Value);
                    throw null;
                }
            }
            return(Comparer <int> .Default.Compare((int)x.Type, (int)y.Type));
        }
Пример #4
0
        public void Compare_NullAndString_False()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare(null, new DateTime(2013, 10, 16));

            Assert.That(result.AreEqual, Is.False);
        }
Пример #5
0
 public void Compare_yyyymmddWithRoundingToSeconds_True()
 {
     var comparer = new DateTimeComparer();
     var result = comparer.Compare("2013-10-08 01:00:05.557", "2013-10-08 01:00:05.850"
         , new DateTimeRounding(new TimeSpan(0,0,1), Rounding.RoundingStyle.Round));
     Assert.That(result.AreEqual, Is.True);
 }
Пример #6
0
        public void Compare_ValidDateAndAny_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("2013-10-16", "(any)");

            Assert.That(result.AreEqual, Is.True);
        }
Пример #7
0
        public void Compare_ddmmyyyy_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("16/10/2013", new DateTime(2013, 10, 16));

            Assert.That(result.AreEqual, Is.True);
        }
Пример #8
0
        public void Compare_mmddyyyyhhmmss_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("10/16/2013 00:00:00", new DateTime(2013, 10, 16));

            Assert.That(result.AreEqual, Is.True);
        }
Пример #9
0
        public void Compare_yyyymmddWithToleranceInMilliSeconds_False()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("2013-10-08 01:00:00.500", "2013-10-08 01:00:00.850", "00:00:00.125");

            Assert.That(result.AreEqual, Is.False);
        }
Пример #10
0
        public void Compare_xxxxyyyy_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("2013-10-16", new DateTime(2013, 10, 16));

            Assert.That(result.AreEqual, Is.True);
        }
Пример #11
0
        public void Compare_NullAndAny_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare(null, "(any)");

            Assert.That(result.AreEqual, Is.True);
        }
Пример #12
0
        public void Compare_yyyymmddWithToleranceInHours_False()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("2013-10-09", "2013-10-08 01:00:00", "22:30:00");

            Assert.That(result.AreEqual, Is.False);
        }
Пример #13
0
        public void Compare_NullAndNullPlaceHolder_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare(null, "(null)");

            Assert.That(result.AreEqual, Is.True);
        }
Пример #14
0
        public void Compare_yyyymmddWithToleranceInDays_True()
        {
            var comparer = new DateTimeComparer();
            var result   = comparer.Compare("2013-10-09", "2013-10-08", "1");

            Assert.That(result.AreEqual, Is.True);
        }
Пример #15
0
        public async Task Calendars_AddOrUpdateEvents_HandlesUTC()
        {
            var calendarEvent = GetTestEvent();
            var calendar      = new Calendar {
                Name = _calendarName
            };

            var calendarEventUtc = new CalendarEvent
            {
                Name  = calendarEvent.Name,
                Start = calendarEvent.Start.ToUniversalTime(),
                End   = calendarEvent.End.ToUniversalTime()
            };

            await _service.AddOrUpdateCalendarAsync(calendar);

            await _service.AddOrUpdateEventAsync(calendar, calendarEventUtc);

            var eventFromId = await _service.GetEventByIdAsync(calendarEventUtc.ExternalID);

            Assert.AreEqual(0, _dateTimeComparer.Compare(calendarEvent.Start, eventFromId.Start), "Event start times differ");
            Assert.AreEqual(0, _dateTimeComparer.Compare(calendarEvent.End, eventFromId.End), "Event end times differ");
        }
Пример #16
0
        protected override bool ApplyWithReference(object reference, object x)
        {
            var cpr = new DateTimeComparer();

            return(cpr.Compare(x, reference).AreEqual);
        }
Пример #17
0
            private static void _verifySame(State state)
            {
                object left     = state.Left;
                object right    = state.Right;
                string crumb    = state.Crumb;
                int    maxDepth = state.MaxDepth;
                var    log      = state.Log;
                int    depth    = state.CurrentDepth;

                log.Info(state.ToString(), state.CurrentDepth);
                if (depth > maxDepth)
                {
                    var msg = $"Maximum object depth of {state.MaxDepth} exceeded. {crumb}";
                    throw new VerifyException(msg, "NA", "NA", "NA");
                }

                if (NullComparer.BothNull(state))
                {
                    return;
                }

                var properties = PropertyHelper.ComparableProperties(left, right);

                foreach (var prop in properties)
                {
                    var name      = prop.Name;
                    var propCrumb = $"{crumb}.{name}";

                    var newstate = state.CreateChildState(prop.Type, name, prop.LHS, prop.RHS, propCrumb);

                    // NULLS
                    // -----
                    if (NullComparer.BothNull(newstate))
                    {
                        continue;
                    }

                    //DATETIME
                    // -------
                    if (DateTimeComparer.Compare(newstate))
                    {
                        continue;
                    }

                    //TIMESPAN
                    // -------
                    if (TimeSpanComparer.Compare(newstate))
                    {
                        continue;
                    }

                    // STRING COMPARABLE
                    // -----------------
                    if (StringComparer.CompareByStrings(newstate))
                    {
                        continue;
                    }

                    // LISTS
                    if (name.Contains("IList`"))
                    {
                        continue;
                    }

                    // CLASS
                    // -----

                    _verifySame(newstate);
                }
            }
Пример #18
0
        private IEnumerable <DataRow> CompareValues(DataRow rx, DataRow ry)
        {
            var nonMatchingValueRows = new List <DataRow>();
            var isRowOnError         = false;

            for (int i = 0; i < rx.Table.Columns.Count; i++)
            {
                if (Settings.GetColumnRole(i) == ColumnRole.Value)
                {
                    //Null management
                    if (rx.IsNull(i) || ry.IsNull(i))
                    {
                        if (!rx.IsNull(i) || !ry.IsNull(i))
                        {
                            ry.SetColumnError(i, ry.IsNull(i) ? rx[i].ToString() : "(null)");
                            if (!isRowOnError)
                            {
                                isRowOnError = true;
                                nonMatchingValueRows.Add(ry);
                            }
                        }
                    }
                    //(value) management
                    else if (rx[i].ToString() == "(value)" || ry[i].ToString() == "(value)")
                    {
                        if (rx.IsNull(i) || ry.IsNull(i))
                        {
                            ry.SetColumnError(i, rx[i].ToString());
                            if (!isRowOnError)
                            {
                                isRowOnError = true;
                                nonMatchingValueRows.Add(ry);
                            }
                        }
                    }
                    //Not Null management
                    else
                    {
                        ComparerResult result = null;

                        //Numeric
                        if (Settings.GetColumnType(i) == ColumnType.Numeric)
                        {
                            //Convert to decimal
                            if (Settings.IsRounding(i))
                            {
                                result = numericComparer.Compare(rx[i], ry[i], Settings.GetRounding(i));
                            }
                            else
                            {
                                result = numericComparer.Compare(rx[i], ry[i], Settings.GetTolerance(i));
                            }
                        }
                        //Date and Time
                        else if (Settings.GetColumnType(i) == ColumnType.DateTime)
                        {
                            //Convert to dateTime
                            if (Settings.IsRounding(i))
                            {
                                result = dateTimeComparer.Compare(rx[i], ry[i], Settings.GetRounding(i));
                            }
                            else
                            {
                                result = dateTimeComparer.Compare(rx[i], ry[i], Settings.GetTolerance(i));
                            }
                        }
                        //Boolean
                        else if (Settings.GetColumnType(i) == ColumnType.Boolean)
                        {
                            //Convert to bool
                            result = booleanComparer.Compare(rx[i], ry[i]);
                        }
                        //Text
                        else
                        {
                            result = textComparer.Compare(rx[i], ry[i]);
                        }

                        //If are not equal then we need to set the message in the ColumnError.
                        if (!result.AreEqual)
                        {
                            ry.SetColumnError(i, result.Message);
                            if (!isRowOnError)
                            {
                                isRowOnError = true;
                                nonMatchingValueRows.Add(ry);
                            }
                        }
                    }
                }
            }
            return(nonMatchingValueRows);
        }
Пример #19
0
        protected ResultSetCompareResult doCompare(DataTable x, DataTable y)
        {
            var chrono = DateTime.Now;

            var columnsCount = Math.Max(y.Columns.Count, x.Columns.Count);

            if (Settings == null)
            {
                BuildDefaultSettings(columnsCount);
            }
            else
            {
                Settings.ApplyTo(columnsCount);
            }

            Settings.ConsoleDisplay();
            WriteSettingsToDataTableProperties(y, Settings);
            WriteSettingsToDataTableProperties(x, Settings);

            CheckSettingsAndDataTable(y, Settings);
            CheckSettingsAndDataTable(x, Settings);

            CheckSettingsAndFirstRow(y, Settings);
            CheckSettingsAndFirstRow(x, Settings);

            var keyComparer = new DataRowKeysComparer(Settings, x.Columns.Count);

            CalculateHashValues(x, xDict, keyComparer, false);
            CalculateHashValues(y, yDict, keyComparer, true);

            chrono = DateTime.Now;
            List <CompareHelper> missingRows;

            {
                var missingRowKeys = xDict.Keys.Except(yDict.Keys);
                missingRows = new List <CompareHelper>(missingRowKeys.Count());
                foreach (Int64 i in missingRowKeys)
                {
                    missingRows.Add(xDict[i]);
                }
            }
            Trace.WriteLineIf(NBiTraceSwitch.TraceInfo, string.Format("Missing rows: {0} [{1}]", missingRows.Count(), DateTime.Now.Subtract(chrono).ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));

            chrono = DateTime.Now;
            List <CompareHelper> unexpectedRows;

            {
                var unexpectedRowKeys = yDict.Keys.Except(xDict.Keys);
                unexpectedRows = new List <CompareHelper>(unexpectedRowKeys.Count());
                foreach (Int64 i in unexpectedRowKeys)
                {
                    unexpectedRows.Add(yDict[i]);
                }
            }
            Trace.WriteLineIf(NBiTraceSwitch.TraceInfo, string.Format("Unexpected rows: {0} [{1}]", unexpectedRows.Count(), DateTime.Now.Subtract(chrono).ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));

            chrono = DateTime.Now;
            List <CompareHelper> keyMatchingRows;

            {
                var keyMatchingRowKeys = xDict.Keys.Intersect(yDict.Keys);
                keyMatchingRows = new List <CompareHelper>(keyMatchingRowKeys.Count());
                foreach (Int64 i in keyMatchingRowKeys)
                {
                    keyMatchingRows.Add(xDict[i]);
                }
            }
            Trace.WriteLineIf(NBiTraceSwitch.TraceInfo, string.Format("Rows with a matching key and not duplicated: {0}  [{1}]", keyMatchingRows.Count(), DateTime.Now.Subtract(chrono).ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));

            chrono = DateTime.Now;
            var nonMatchingValueRows = new List <DataRow>();

            // If all of the columns make up the key, then we already know which rows match and which don't.
            //  So there is no need to continue testing
            if (Settings.KeysDef != ResultSetComparisonSettings.KeysChoice.All)
            {
                foreach (var rxHelper in keyMatchingRows)
                {
                    var ryHelper = yDict[rxHelper.KeysHashed];

                    //if (ryHelper.ValuesHashed == rxHelper.ValuesHashed)
                    //{
                    //    // quick shortcut. If the hash of the values matches, then there is no further need to test
                    //    continue;
                    //}

                    var rx = rxHelper.DataRowObj;
                    var ry = ryHelper.DataRowObj;

                    for (int i = 0; i < rx.Table.Columns.Count; i++)
                    {
                        if (Settings.IsValue(i))
                        {
                            //Null management
                            if (rx.IsNull(i) || ry.IsNull(i))
                            {
                                if (!rx.IsNull(i) || !ry.IsNull(i))
                                {
                                    ry.SetColumnError(i, ry.IsNull(i) ? rx[i].ToString() : "(null)");
                                    if (!nonMatchingValueRows.Contains(ry))
                                    {
                                        nonMatchingValueRows.Add(ry);
                                    }
                                }
                            }
                            //(value) management
                            else if (rx[i].ToString() == "(value)" || ry[i].ToString() == "(value)")
                            {
                                if (rx.IsNull(i) || ry.IsNull(i))
                                {
                                    ry.SetColumnError(i, rx[i].ToString());
                                    if (!nonMatchingValueRows.Contains(ry))
                                    {
                                        nonMatchingValueRows.Add(ry);
                                    }
                                }
                            }
                            //Not Null management
                            else
                            {
                                ComparerResult result = null;

                                //Numeric
                                if (Settings.IsNumeric(i))
                                {
                                    //Convert to decimal
                                    if (Settings.IsRounding(i))
                                    {
                                        result = numericComparer.Compare(rx[i], ry[i], Settings.GetRounding(i));
                                    }
                                    else
                                    {
                                        result = numericComparer.Compare(rx[i], ry[i], Settings.GetTolerance(i));
                                    }
                                }
                                //Date and Time
                                else if (Settings.IsDateTime(i))
                                {
                                    //Convert to dateTime
                                    if (Settings.IsRounding(i))
                                    {
                                        result = dateTimeComparer.Compare(rx[i], ry[i], Settings.GetRounding(i));
                                    }
                                    else
                                    {
                                        result = dateTimeComparer.Compare(rx[i], ry[i], Settings.GetTolerance(i));
                                    }
                                }
                                //Boolean
                                else if (Settings.IsBoolean(i))
                                {
                                    //Convert to bool
                                    result = booleanComparer.Compare(rx[i], ry[i]);
                                }
                                //Text
                                else
                                {
                                    result = textComparer.Compare(rx[i], ry[i]);
                                }

                                //If are not equal then we need to set the message in the ColumnError.
                                if (!result.AreEqual)
                                {
                                    ry.SetColumnError(i, result.Message);
                                    if (!nonMatchingValueRows.Contains(ry))
                                    {
                                        nonMatchingValueRows.Add(ry);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            Trace.WriteLineIf(NBiTraceSwitch.TraceInfo, string.Format("Rows with a matching key but without matching value: {0} [{1}]", nonMatchingValueRows.Count(), DateTime.Now.Subtract(chrono).ToString(@"d\d\.hh\h\:mm\m\:ss\s\ \+fff\m\s")));

            var duplicatedRows = new List <DataRow>(); // Dummy place holder

            return(ResultSetCompareResult.Build(
                       missingRows.Select(a => a.DataRowObj).ToList(),
                       unexpectedRows.Select(a => a.DataRowObj).ToList(),
                       duplicatedRows,
                       keyMatchingRows.Select(a => a.DataRowObj).ToList(),
                       nonMatchingValueRows
                       ));
        }
Пример #20
0
        private void CompareValues(List <CompareHelper> keyMatchingRows, List <DataRow> nonMatchingValueRows)
        {
            if (Settings.KeysDef != ResultSetComparisonSettings.KeysChoice.All)
            {
                foreach (var rxHelper in keyMatchingRows)
                {
                    var ryHelper = yDict[rxHelper.Keys];

                    //if (ryHelper.ValuesHashed == rxHelper.ValuesHashed)
                    //{
                    //    // quick shortcut. If the hash of the values matches, then there is no further need to test
                    //    continue;
                    //}

                    var rx = rxHelper.DataRowObj;
                    var ry = ryHelper.DataRowObj;

                    var isRowOnError = false;

                    for (int i = 0; i < rx.Table.Columns.Count; i++)
                    {
                        if (Settings.GetColumnRole(i) == ColumnRole.Value)
                        {
                            //Any management
                            if (rx[i].ToString() != "(any)" && ry[i].ToString() != "(any)")
                            {
                                //Null management
                                if (rx.IsNull(i) || ry.IsNull(i))
                                {
                                    if ((!rx.IsNull(i) && rx[i].ToString() != "(blank)") || (!ry.IsNull(i) && ry[i].ToString() != "(blank)"))
                                    {
                                        ry.SetColumnError(i, ry.IsNull(i) ? rx[i].ToString() : "(null)");
                                        if (!isRowOnError)
                                        {
                                            isRowOnError = true;
                                            nonMatchingValueRows.Add(ry);
                                        }
                                    }
                                }
                                //(value) management
                                else if (rx[i].ToString() == "(value)" || ry[i].ToString() == "(value)")
                                {
                                    if (rx.IsNull(i) || ry.IsNull(i))
                                    {
                                        ry.SetColumnError(i, rx[i].ToString());
                                        if (!isRowOnError)
                                        {
                                            isRowOnError = true;
                                            nonMatchingValueRows.Add(ry);
                                        }
                                    }
                                }
                                //Not Null management
                                else
                                {
                                    ComparerResult result = null;

                                    //Numeric
                                    if (Settings.GetColumnType(i) == ColumnType.Numeric)
                                    {
                                        //Convert to decimal
                                        if (Settings.IsRounding(i))
                                        {
                                            result = numericComparer.Compare(rx[i], ry[i], Settings.GetRounding(i));
                                        }
                                        else
                                        {
                                            result = numericComparer.Compare(rx[i], ry[i], Settings.GetTolerance(i));
                                        }
                                    }
                                    //Date and Time
                                    else if (Settings.GetColumnType(i) == ColumnType.DateTime)
                                    {
                                        //Convert to dateTime
                                        if (Settings.IsRounding(i))
                                        {
                                            result = dateTimeComparer.Compare(rx[i], ry[i], Settings.GetRounding(i));
                                        }
                                        else
                                        {
                                            result = dateTimeComparer.Compare(rx[i], ry[i], Settings.GetTolerance(i));
                                        }
                                    }
                                    //Boolean
                                    else if (Settings.GetColumnType(i) == ColumnType.Boolean)
                                    {
                                        //Convert to bool
                                        result = booleanComparer.Compare(rx[i], ry[i]);
                                    }
                                    //Text
                                    else
                                    {
                                        result = textComparer.Compare(rx[i], ry[i]);
                                    }

                                    //If are not equal then we need to set the message in the ColumnError.
                                    if (!result.AreEqual)
                                    {
                                        ry.SetColumnError(i, result.Message);
                                        if (!isRowOnError)
                                        {
                                            isRowOnError = true;
                                            nonMatchingValueRows.Add(ry);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #21
0
        public void Compare_StringAndAny_ArgumentException()
        {
            var comparer = new DateTimeComparer();

            Assert.Throws <NBiException>(delegate { comparer.Compare("Not a date", "(any)"); });
        }
Пример #22
0
        public override bool Apply(object x)
        {
            var cpr = new DateTimeComparer();

            return(cpr.Compare(x, Reference).AreEqual);
        }
Пример #23
0
        public bool Compare(object x, object y)
        {
            var cpr = new DateTimeComparer();

            return(cpr.Compare(x, y).AreEqual);
        }