public void Equals() { var comparer = LogicalStringComparer.Default as LogicalStringComparer; Assert.IsFalse(comparer.Equals("abc", "def")); Assert.IsTrue(comparer.Equals("abc", "abc")); object x = "abc"; object y = "def"; Assert.IsFalse(LogicalStringComparer.Equals(x, y)); Assert.IsTrue(LogicalStringComparer.Equals(x, x)); Assert.IsFalse(((IEqualityComparer)comparer).Equals(x, y)); Assert.IsTrue(((IEqualityComparer)comparer).Equals(x, x)); }
public void HashCode() { LogicalStringComparer comparer = LogicalStringComparer.Default as LogicalStringComparer; string x = "abc"; Assert.AreEqual(x.GetHashCode(), comparer.GetHashCode("abc")); object y = "def"; Assert.AreEqual(y.GetHashCode(), comparer.GetHashCode(y)); ExceptionAssert.Throws <ArgumentNullException>(() => comparer.GetHashCode(((object)null))); ExceptionAssert.Throws <ArgumentException>(() => comparer.GetHashCode(((object)DateTime.Today))); ExceptionAssert.Throws <ArgumentNullException>(() => comparer.GetHashCode(((string)null))); }
public void NaturalSortComparerPerformanceTest() { // Performance test bool ascending = true; bool output = false; int size = 1000000; TimeSpan naturalsorttime; #if USE_NATIVE_STRCMP TimeSpan NaturalStringComparerTime; #endif TimeSpan logicalsorttime; TimeSpan normalsorttime; Random rnd = new Random(DateTime.Now.Millisecond); List<string> testItems = new List<string>(size); for (int i = 0; i < size; i++) { if (i % 2 == 0) testItems.Add(rnd.Next(100).ToString() + ((char)('A' + rnd.Next(25))) + rnd.Next(100).ToString()); else testItems.Add(((char)('A' + rnd.Next(25))) + rnd.Next(100).ToString()); } List<string> testitems2 = new List<string>(testItems); List<string> testitems3 = new List<string>(testItems); #if USE_NATIVE_STRCMP List<string> testitems4 = new List<string>(testItems); #endif DateTime start = DateTime.Now; NaturalSortComparer comparer = new NaturalSortComparer(ascending); testItems.Sort(comparer); DateTime stop = DateTime.Now; naturalsorttime = stop - start; start = DateTime.Now; LogicalStringComparer logicalcomparer = new LogicalStringComparer(ascending); testitems2.Sort(logicalcomparer); stop = DateTime.Now; logicalsorttime = stop - start; start = DateTime.Now; testitems3.Sort(); stop = DateTime.Now; normalsorttime = stop - start; #if USE_NATIVE_STRCMP start = DateTime.Now; testitems4.Sort(new NaturalStringComparer(ascending)); stop = DateTime.Now; NaturalStringComparerTime = stop - start; #endif if (output) { Debug.WriteLine("Natural Comparison: "); foreach (string _item in testItems) { Debug.WriteLine(_item); } Debug.WriteLine("Logical Comparison: "); foreach (string _item in testitems2) { Debug.WriteLine(_item); } Debug.WriteLine("Normal Comparison"); foreach (string _item in testitems3) { Debug.WriteLine(_item); } } Console.WriteLine("Elapsed time for natural sort: " + naturalsorttime); Console.WriteLine("Elapsed time for logical sort: " + logicalsorttime); #if USE_NATIVE_STRCMP Console.WriteLine("Elapsed time for native natural sort: " + NaturalStringComparerTime); #endif Console.WriteLine("Elapsed time for normal sort : " + normalsorttime); for (int i = 0; i < testItems.Count; i++) { Assert.AreEqual(testItems[i], testitems2[i]); #if USE_NATIVE_STRCMP Assert.AreEqual(testItems[i], testitems4[i]); #endif } }
public void Compare1() { LogicalStringComparer comparer = LogicalStringComparer.Default as LogicalStringComparer; Assert.IsTrue(comparer.Compare("abc", "def") < 0); Assert.IsTrue(comparer.Compare("def", "abc") > 0); Assert.IsTrue(comparer.Compare("abc", "abc") == 0); Assert.IsTrue(comparer.Compare("abc1", "abc10") < 0); Assert.IsTrue(comparer.Compare("abc10", "abc1") > 0); Assert.IsTrue(comparer.Compare("abc1", "abc1") == 0); Assert.IsTrue(comparer.Compare("abc1d", "abc10d") < 0); Assert.IsTrue(comparer.Compare("abc10d", "abc1d") > 0); Assert.IsTrue(comparer.Compare("abc1d", "abc1d") == 0); Assert.IsTrue(comparer.Compare("abc1d", "abcd") < 0); Assert.IsTrue(comparer.Compare("abcd", "abc1d") > 0); Assert.IsTrue(comparer.Compare("10abc1d", "abcd") < 0); Assert.IsTrue(comparer.Compare("abcd", "10abc1d") > 0); Assert.IsTrue(comparer.Compare("10abc1d", "abcd") < 0); Assert.IsTrue(comparer.Compare("abc1d", "abc11d") < 0); Assert.IsTrue(comparer.Compare("abc11d", "abc1d") > 0); Assert.IsTrue(comparer.Compare("=1", "[1") < 0); Assert.IsTrue(comparer.Compare("[1", "=1") > 0); Assert.IsTrue(comparer.Compare("=1", "=1") == 0); Assert.IsFalse(comparer.Compare("abc", "[1") < 0); Assert.IsFalse(comparer.Compare("[1", "abc") > 0); Assert.IsTrue(comparer.Compare("[1", "[1") == 0); Assert.IsTrue(comparer.Compare("abc", String.Empty) == 1); Assert.IsTrue(comparer.Compare(String.Empty, "abc") == -1); Assert.IsTrue(comparer.Compare(String.Empty, String.Empty) == 0); Assert.IsTrue(comparer.Compare("abc", null) == 1); Assert.IsTrue(comparer.Compare(null, "abc") == -1); Assert.IsTrue(comparer.Compare(null, null) == 0); Assert.IsFalse(comparer.Compare("abc", "a†bc") < 0); Assert.IsFalse(comparer.Compare("a†bc", "abc") > 0); Assert.IsTrue(comparer.Compare("a†bc", "a†bc") == 0); Assert.IsTrue(comparer.Compare("1abc", "def") < 0); Assert.IsTrue(comparer.Compare("def", "1abc") > 0); Assert.IsTrue(comparer.Compare("1abc", "1abc") == 0); Assert.IsTrue(comparer.Compare("1abc", "2abc") < 0); Assert.IsTrue(comparer.Compare("2abc", "1abc") > 0); Assert.IsTrue(comparer.Compare("1abc", "10abc") < 0); Assert.IsTrue(comparer.Compare("10abc", "1abc") > 0); Assert.IsTrue(comparer.Compare("11abc", "12abc") < 0); Assert.IsTrue(comparer.Compare("11abc", "11abc") == 0); Assert.IsTrue(comparer.Compare("abc", "defg") < 0); Assert.IsTrue(comparer.Compare("defg", "abc") > 0); Assert.IsTrue(comparer.Compare("abc1", "abcd10") < 0); Assert.IsTrue(comparer.Compare("abcd10", "abc1") > 0); Assert.IsTrue(comparer.Compare("=1", "[1a") < 0); Assert.IsTrue(comparer.Compare("[1a", "=1") > 0); Assert.IsFalse(comparer.Compare("abc", "[1a") < 0); Assert.IsFalse(comparer.Compare("[1a", "abc") > 0); Assert.IsFalse(comparer.Compare("abc", "a†bcd") < 0); Assert.IsFalse(comparer.Compare("a†bcd", "abc") > 0); Assert.IsTrue(comparer.Compare("10", "11") < 0); Assert.IsTrue(comparer.Compare("11", "10") > 0); Assert.IsTrue(comparer.Compare("05", "09") < 0); Assert.IsTrue(comparer.Compare("09", "0") > 0); Assert.IsTrue(comparer.Compare("05", "9") < 0); Assert.IsTrue(comparer.Compare("09", "00") > 0); Assert.IsTrue(comparer.Compare("05abc", "9abc") < 0); Assert.IsTrue(comparer.Compare("9abc", "05abc") > 0); Assert.IsTrue(comparer.Compare("5abc", "09abc") < 0); Assert.IsTrue(comparer.Compare("09abc", "5abc") > 0); Assert.IsTrue(comparer.Compare("10", "100") < 0); Assert.IsTrue(comparer.Compare("100", "10") > 0); Assert.IsTrue(comparer.Compare("q\u8030R0P\0", "q\u8030r0pR") == -1); Assert.IsTrue(comparer.Compare("q\u8030\u8030B0\u80300", "q\u8030\u8030b0\u80300") == 0); comparer = LogicalStringComparer.DefaultInvariant as LogicalStringComparer; Assert.IsTrue(comparer.Compare("abc", "def") < 0); Assert.IsTrue(comparer.Compare("def", "abc") > 0); Assert.IsTrue(comparer.Compare("abc", "abc") == 0); Assert.IsTrue(comparer.Compare("abc1", "abc10") < 0); Assert.IsTrue(comparer.Compare("abc10", "abc1") > 0); Assert.IsTrue(comparer.Compare("abc1", "abc1") == 0); Assert.IsTrue(comparer.Compare("=1", "[1") < 0); Assert.IsTrue(comparer.Compare("[1", "=1") > 0); Assert.IsTrue(comparer.Compare("=1", "=1") == 0); Assert.IsFalse(comparer.Compare("abc", "[1") < 0); Assert.IsFalse(comparer.Compare("[1", "abc") > 0); Assert.IsTrue(comparer.Compare("[1", "[1") == 0); Assert.IsTrue(comparer.Compare("abc", String.Empty) == 1); Assert.IsTrue(comparer.Compare(String.Empty, "abc") == -1); Assert.IsTrue(comparer.Compare(String.Empty, String.Empty) == 0); Assert.IsTrue(comparer.Compare("abc", null) == 1); Assert.IsTrue(comparer.Compare(null, "abc") == -1); Assert.IsTrue(comparer.Compare(null, null) == 0); Assert.IsFalse(comparer.Compare("abc", "a†bc") < 0); Assert.IsFalse(comparer.Compare("a†bc", "abc") > 0); Assert.IsTrue(comparer.Compare("a†bc", "a†bc") == 0); Assert.IsTrue(comparer.Compare("1abc", "def") < 0); Assert.IsTrue(comparer.Compare("def", "1abc") > 0); Assert.IsTrue(comparer.Compare("1abc", "1abc") == 0); Assert.IsTrue(comparer.Compare("1abc", "2abc") < 0); Assert.IsTrue(comparer.Compare("2abc", "1abc") > 0); Assert.IsTrue(comparer.Compare("1abc", "10abc") < 0); Assert.IsTrue(comparer.Compare("10abc", "1abc") > 0); Assert.IsTrue(comparer.Compare("11abc", "12abc") < 0); Assert.IsTrue(comparer.Compare("11abc", "11abc") == 0); Assert.IsTrue(comparer.Compare("abc", "defg") < 0); Assert.IsTrue(comparer.Compare("defg", "abc") > 0); Assert.IsTrue(comparer.Compare("abc1", "abcd10") < 0); Assert.IsTrue(comparer.Compare("abcd10", "abc1") > 0); Assert.IsTrue(comparer.Compare("=1", "[1a") < 0); Assert.IsTrue(comparer.Compare("[1a", "=1") > 0); Assert.IsFalse(comparer.Compare("abc", "[1a") < 0); Assert.IsFalse(comparer.Compare("[1a", "abc") > 0); Assert.IsFalse(comparer.Compare("abc", "a†bcd") < 0); Assert.IsFalse(comparer.Compare("a†bcd", "abc") > 0); }
public void NaturalSortComparerPerformanceTest() { // Performance test bool ascending = true; bool output = false; int size = 1000000; TimeSpan naturalsorttime; #if USE_NATIVE_STRCMP TimeSpan NaturalStringComparerTime; #endif TimeSpan logicalsorttime; TimeSpan normalsorttime; Random rnd = new Random(DateTime.Now.Millisecond); List <string> testItems = new List <string>(size); for (int i = 0; i < size; i++) { if (i % 2 == 0) { testItems.Add(rnd.Next(100).ToString() + ((char)('A' + rnd.Next(25))) + rnd.Next(100).ToString()); } else { testItems.Add(((char)('A' + rnd.Next(25))) + rnd.Next(100).ToString()); } } List <string> testitems2 = new List <string>(testItems); List <string> testitems3 = new List <string>(testItems); #if USE_NATIVE_STRCMP List <string> testitems4 = new List <string>(testItems); #endif DateTime start = DateTime.Now; NaturalSortComparer comparer = new NaturalSortComparer(ascending); testItems.Sort(comparer); DateTime stop = DateTime.Now; naturalsorttime = stop - start; start = DateTime.Now; LogicalStringComparer logicalcomparer = new LogicalStringComparer(ascending); testitems2.Sort(logicalcomparer); stop = DateTime.Now; logicalsorttime = stop - start; start = DateTime.Now; testitems3.Sort(); stop = DateTime.Now; normalsorttime = stop - start; #if USE_NATIVE_STRCMP start = DateTime.Now; testitems4.Sort(new NaturalStringComparer(ascending)); stop = DateTime.Now; NaturalStringComparerTime = stop - start; #endif if (output) { Debug.WriteLine("Natural Comparison: "); foreach (string _item in testItems) { Debug.WriteLine(_item); } Debug.WriteLine("Logical Comparison: "); foreach (string _item in testitems2) { Debug.WriteLine(_item); } Debug.WriteLine("Normal Comparison"); foreach (string _item in testitems3) { Debug.WriteLine(_item); } } Console.WriteLine("Elapsed time for natural sort: " + naturalsorttime); Console.WriteLine("Elapsed time for logical sort: " + logicalsorttime); #if USE_NATIVE_STRCMP Console.WriteLine("Elapsed time for native natural sort: " + NaturalStringComparerTime); #endif Console.WriteLine("Elapsed time for normal sort : " + normalsorttime); for (int i = 0; i < testItems.Count; i++) { Assert.AreEqual(testItems[i], testitems2[i]); #if USE_NATIVE_STRCMP Assert.AreEqual(testItems[i], testitems4[i]); #endif } }
public static int Main(string[] args) { try { try { Dictionary<string, HashSet<string>> packages = new Dictionary<string, HashSet<string>>(); string slnFile = args.LastOrDefault(); if (slnFile == null) { throw new ApplicationException(UsageDescription, ApplicationExitCode.InvalidArguments); } if (!Path.GetExtension(slnFile).Equals(SolutionFileExtension, StringComparison.OrdinalIgnoreCase)) { slnFile += SolutionFileExtension; } if (!Path.IsPathRooted(slnFile)) { slnFile = Path.Combine(Environment.CurrentDirectory, slnFile); } if (!File.Exists(slnFile)) { throw new ApplicationException(string.Format("Could not find file '{0}'", slnFile), ApplicationExitCode.FileNotFound); } Solution sln = Solution.FromFile(slnFile); Console.WriteLine(); Console.WriteLine("Determining NuGet packages:"); foreach (SolutionProject proj in sln.Projects.Where(x => x.Type != SolutionProjectTypes.Folder).OrderBy(x => x.Name)) { Console.WriteLine(); Console.WriteLine(string.Format("{0}{1}:", new string(IndentChar, 2), proj.Name)); Console.WriteLine(); string nugetConfigFile = Path.Combine(Path.GetDirectoryName(Path.Combine(Path.GetDirectoryName(slnFile), proj.RelativePath)), "packages.config"); NugetPackageConfig nugetPackageConfig; if (File.Exists(nugetConfigFile) && (nugetPackageConfig = NugetPackageConfig.FromFile(nugetConfigFile)).InstalledPackages.Any()) { foreach (Package package in nugetPackageConfig.InstalledPackages.OrderBy(x => x.ID).ThenBy(x => x.Version)) { Console.WriteLine(string.Format("{0}- {1} [v{2}]", new string(IndentChar, 4), package.ID, package.Version)); HashSet<string> versionLookup; if (!packages.TryGetValue(package.ID, out versionLookup)) { versionLookup = new HashSet<string>(); packages.Add(package.ID, versionLookup); } versionLookup.Add(package.Version); } } else { Console.WriteLine(string.Format("{0} [None]", new string(IndentChar, 4))); } } var packagesWithMultipleVersions = packages.Where(x => x.Value.Count > 1); if (packagesWithMultipleVersions.Any()) { StringBuilder sb = new StringBuilder(); LogicalStringComparer strComparer = new LogicalStringComparer(); sb.Append("Following NuGet packages are installed multiple times in differed versions:"); foreach (var packageInfo in packagesWithMultipleVersions.OrderBy(x => x.Key)) { sb.AppendLine(); sb.AppendLine(); sb.AppendLine(string.Format("{0}{1}:", new string(IndentChar, 2), packageInfo.Key)); foreach (string version in packageInfo.Value.OrderBy(x => x, strComparer)) { sb.AppendLine(); sb.Append(string.Format("{0}- v{1}", new string(IndentChar, 4), version)); } } throw new ApplicationException(sb.ToString(), ApplicationExitCode.MultipleNuGetPackageVersions); } Console.WriteLine(); Console.WriteLine("There are no packages with multiple versions!"); return (int)ApplicationExitCode.Succeeded; } catch (ApplicationException ex) { Console.WriteLine(); Console.WriteLine(ex.Message); return (int)ex.ExitCode; } catch (Exception) { Console.WriteLine(); Console.WriteLine("An internal error occurred"); return (int)ApplicationExitCode.Failed; } } finally { Console.WriteLine(); if (Debugger.IsAttached) { Console.Write("Press any key to exit..."); Console.ReadKey(); } } }