private static void AssertTime(TimeSpan?expected, TimeSpan?actual, string provider)
        {
            if (provider == ProviderName.SqlServer2000 ||
                provider == ProviderName.SqlServer2005 ||
                provider.Contains("Oracle") ||
                provider == ProviderName.SqlCe ||
                provider == ProviderName.SQLiteClassic ||
                provider == TestProvName.SQLiteClassicMiniProfilerMapped ||
                provider == TestProvName.SQLiteClassicMiniProfilerUnmapped ||
                provider == ProviderName.SQLiteMS ||
                provider == TestProvName.MySql55 ||
                provider == ProviderName.Firebird ||
                provider == TestProvName.Firebird3)
            {
                return;
            }

            if (expected != null)
            {
                switch (TestProvName.GetFamily(provider))
                {
                case ProviderName.Sybase:
                case ProviderName.SybaseManaged:
                    expected = TimeSpan.FromTicks((expected.Value.Ticks / 10000) * 10000);
                    switch (expected.Value.Milliseconds % 10)
                    {
                    case 1:
                    case 4:
                    case 7:
                        expected = expected.Value.Add(TimeSpan.FromMilliseconds(-1));
                        break;

                    case 2:
                    case 5:
                    case 9:
                        expected = expected.Value.Add(TimeSpan.FromMilliseconds(1));
                        break;

                    case 8:
                        expected = expected.Value.Add(TimeSpan.FromMilliseconds(2));
                        break;
                    }

                    if (expected == TimeSpan.FromDays(1))
                    {
                        expected = expected.Value.Add(TimeSpan.FromMilliseconds(-4));
                    }

                    break;

                case ProviderName.Firebird:
                case TestProvName.Firebird3:
                    expected = TimeSpan.FromTicks((expected.Value.Ticks / 1000) * 1000);
                    break;

                case ProviderName.InformixDB2:
                case ProviderName.Informix:
                    expected = TimeSpan.FromTicks((expected.Value.Ticks / 100) * 100);
                    break;

                case ProviderName.PostgreSQL:
                case ProviderName.PostgreSQL92:
                case ProviderName.PostgreSQL93:
                case ProviderName.PostgreSQL95:
                case TestProvName.PostgreSQL10:
                case TestProvName.PostgreSQL11:
                    expected = TimeSpan.FromTicks((expected.Value.Ticks / 10) * 10);
                    break;

                case ProviderName.DB2:
                case ProviderName.Access:
                case ProviderName.AccessOdbc:
                case ProviderName.SapHanaNative:
                case ProviderName.SapHanaOdbc:
                case TestProvName.MariaDB:
                    expected = TimeSpan.FromTicks((expected.Value.Ticks / 10000000) * 10000000);
                    break;

                case ProviderName.MySqlConnector:
                case ProviderName.MySql:
                    var msecs = expected.Value.Milliseconds;
                    if (msecs > 500)
                    {
                        expected = expected.Value.Add(TimeSpan.FromSeconds(1));
                    }

                    expected = TimeSpan.FromTicks((expected.Value.Ticks / 10000000) * 10000000);

                    break;
                }
            }

            Assert.AreEqual(expected, actual);
        }