示例#1
0
        /// <summary>
        /// Creates an instance of a particular comparer for a given <see cref="RomComparison"/> mode.
        /// </summary>
        /// <param name="comparison">The desired comparison mode.</param>
        /// <returns>A new instance of the comparison implementation. Comparer-specific features may be used if so desired.</returns>
        public static RomComparer GetComparer(RomComparison comparison)
        {
            RomComparer comparer = null;

            switch (comparison)
            {
            case RomComparison.Strict:
                comparer = new RomComparerStrict();
                break;

            case RomComparison.StrictRomCrcOnly:
                comparer = new RomComparerStrictCrcOnly();
                break;

#if CANONICAL_COMPARE_SUPPORTED
            case RomComparison.CanonicalStrict:
                comparer = new CanonicalRomComparerStrict();
                break;

            case RomComparison.CanonicalRomCrcOnly:
                comparer = new CanonicalRomComparer();
                break;
#endif // CANONICAL_COMPARE_SUPPORTED
            default:
                throw new ArgumentException(string.Format(Resources.Strings.RomComparer_InvalidCompareRequestedFormat, comparison), "comparison");
            }
            return(comparer);
        }
示例#2
0
        public void RomComparer_CompareNullToNullAsIRoms_ProducesCorrectResult(RomComparison comparisonMode)
        {
            IRom rom0 = null;
            IRom rom1 = null;

            using (var comparer = RomComparer.GetComparer(comparisonMode))
            {
                Assert.Equal(0, comparer.Compare(rom0, rom1));
            }
        }
示例#3
0
        public void RomComparer_CompareNullToRomsAsObjects_ProducesCorrectResult(RomComparison comparisonMode)
        {
            var    romPath = RomComparerTestStorageAccess.Initialize(TestRomResources.TestRomPath).First();
            object rom0    = null;
            object rom1    = Rom.Create(romPath, null);

            using (var comparer = RomComparer.GetComparer(comparisonMode))
            {
                Assert.Equal(-1, comparer.Compare(rom0, rom1));
            }
        }
示例#4
0
        public void RomComparer_CompareTwoSameRomsAsObjects_ProducesCorrectResult(RomComparison comparisonMode)
        {
            var paths = RomComparerTestStorageAccess.Initialize(TestRomResources.TestRomPath, TestRomResources.TestRomPath);

            Assert.NotEqual(paths[0], paths[1]);
            object rom0 = Rom.Create(paths[0], null);
            object rom1 = Rom.Create(paths[1], null);

            using (var comparer = RomComparer.GetComparer(comparisonMode))
            {
                Assert.Equal(0, comparer.Compare(rom0, rom1));
            }
        }
示例#5
0
        public void RomComparer_GetComparerForMode_BehavesAsExpected(RomComparison comparisonMode, Type expectedComparisonType, bool shouldThrowArgumentException)
        {
            if (shouldThrowArgumentException)
            {
                Assert.Throws <ArgumentException>(() => RomComparer.GetComparer(comparisonMode));
            }
            else
            {
                var comparer = RomComparer.GetComparer(comparisonMode);

                Assert.NotNull(comparer);
                Assert.True(expectedComparisonType.IsInstanceOfType(comparer));
            }
        }
示例#6
0
        public void RomComparer_GetDefaultComparerForMode_BehavesAsExpected(RomComparison comparisonMode, RomComparer expectedComparer, bool shouldThrowArgumentException)
        {
            if (shouldThrowArgumentException)
            {
                Assert.Throws <ArgumentException>(() => RomComparer.GetDefaultComparerForMode(comparisonMode));
            }
            else
            {
                var comparer = RomComparer.GetDefaultComparerForMode(comparisonMode);

                Assert.NotNull(comparer);
                Assert.True(object.ReferenceEquals(expectedComparer, comparer));
            }
        }
示例#7
0
        /// <summary>
        /// Inspects two ROMs and determines if they are the same ROM, to the best it is capable of doing.
        /// </summary>
        /// <param name="rom">The reference ROM.</param>
        /// <param name="otherRom">The ROM to compare with.</param>
        /// <param name="programInfo">Program information used for comparison.</param>
        /// <param name="comparisonMode">Specifies the <see cref="RomComparison"/> mode to use to determine equivalence.</param>
        /// <returns>If the two ROMs are equivalent, returns <c>true</c>, otherwise returns <c>false</c>.</returns>
        /// <remarks>Because the same ROM may be packaged in up to three different file formats at this time (.bin + .cfg, .rom, and .luigi), it can be difficult to
        /// determine if two ROMs are, indeed, the same. The <paramref name="comparisonMode"/> defines how to compare the two ROMs</remarks>
        public static bool IsEquivalentTo(this IRom rom, IRom otherRom, IProgramInformation programInfo, RomComparison comparisonMode)
        {
            var equivalent = object.ReferenceEquals(rom, otherRom);

            if (!equivalent)
            {
                var comparer = RomComparer.GetComparer(comparisonMode);
                equivalent = rom.IsEquivalentTo(otherRom, programInfo, comparer);
            }
            return(equivalent);
        }
示例#8
0
 /// <summary>
 /// Compares two ROMs using the specified compare implementation.
 /// </summary>
 /// <param name="rom">The 'reference' ROM to compare against.</param>
 /// <param name="otherRom">The ROM to compare to <paramref name="rom"/>.</param>
 /// <param name="comparisonMode">One of the <see cref="RomComparison"/> mode values. Based on this value, the appropriate default implementation of <see cref="RomComparer"/> will be used.</param>
 /// <returns><c>true</c> if <paramref name="rom"/> and <paramref name="otherRom"/> are considered equal using <paramref name="comparisonMode"/>.</returns>
 public static bool IsEquivalentTo(this IRom rom, IRom otherRom, RomComparison comparisonMode)
 {
     return(rom.IsEquivalentTo(otherRom, null, comparisonMode));
 }