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));
        }
예제 #2
0
        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
              }
        }
예제 #4
0
        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
            }
        }
예제 #6
0
        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();
                }
            }
        }