示例#1
0
        public void TextComparison_Ordinal_SameTexts()
        {
            var midiEvent1 = new TextEvent {
                Text = "abc"
            };
            var midiEvent2 = new TextEvent {
                Text = "abc"
            };

            var settings = new MidiEventEqualityCheckSettings {
                TextComparison = System.StringComparison.Ordinal
            };
            var areEqual = MidiEvent.Equals(midiEvent1, midiEvent2, settings, out var message);

            Assert.IsTrue(areEqual, "Events aren't equal.");
            Assert.IsNull(message, "Message isn't null.");
        }
示例#2
0
        public void DontCompareDeltaTimes(long firstDeltaTime, long secondDeltaTime)
        {
            var midiEvent1 = new NoteOnEvent {
                DeltaTime = firstDeltaTime
            };
            var midiEvent2 = new NoteOnEvent {
                DeltaTime = secondDeltaTime
            };

            var settings = new MidiEventEqualityCheckSettings {
                CompareDeltaTimes = false
            };
            var areEqual = MidiEvent.Equals(midiEvent1, midiEvent2, settings, out var message);

            Assert.IsTrue(areEqual, "Events aren't equal.");
            Assert.IsNull(message, "Message isn't null.");
        }
示例#3
0
        public void TextComparison_OrdinalIgnoreCase(string firstText, string secondText)
        {
            var midiEvent1 = new TextEvent {
                Text = firstText
            };
            var midiEvent2 = new TextEvent {
                Text = secondText
            };

            var settings = new MidiEventEqualityCheckSettings {
                TextComparison = System.StringComparison.OrdinalIgnoreCase
            };
            var areEqual = MidiEvent.Equals(midiEvent1, midiEvent2, settings, out var message);

            Assert.IsTrue(areEqual, "Events aren't equal.");
            Assert.IsNull(message, "Message isn't null.");
        }
示例#4
0
        public void CompareDeltaTimes_SameDeltaTimes()
        {
            var midiEvent1 = new NoteOnEvent {
                DeltaTime = 100
            };
            var midiEvent2 = new NoteOnEvent {
                DeltaTime = 100
            };

            var settings = new MidiEventEqualityCheckSettings {
                CompareDeltaTimes = true
            };
            var areEqual = MidiEvent.Equals(midiEvent1, midiEvent2, settings, out var message);

            Assert.IsTrue(areEqual, "Events aren't equal.");
            Assert.IsNull(message, "Message isn't null.");
        }
示例#5
0
        public void TextComparison_Ordinal_DifferentTexts()
        {
            var midiEvent1 = new TextEvent {
                Text = "abc"
            };
            var midiEvent2 = new TextEvent {
                Text = "Abc"
            };

            var settings = new MidiEventEqualityCheckSettings {
                TextComparison = System.StringComparison.Ordinal
            };
            var areEqual = MidiEvent.Equals(midiEvent1, midiEvent2, settings, out var message);

            Assert.IsFalse(areEqual, "Events are equal.");
            Assert.IsNotNull(message, "Message is null.");
            Assert.IsNotEmpty(message, "Message is empty.");
        }
示例#6
0
        public void CompareDeltaTimes_DifferentDeltaTimes()
        {
            var midiEvent1 = new NoteOnEvent {
                DeltaTime = 100
            };
            var midiEvent2 = new NoteOnEvent {
                DeltaTime = 1000
            };

            var settings = new MidiEventEqualityCheckSettings {
                CompareDeltaTimes = true
            };
            var areEqual = MidiEvent.Equals(midiEvent1, midiEvent2, settings, out var message);

            Assert.IsFalse(areEqual, "Events are equal.");
            Assert.IsNotNull(message, "Message is null.");
            Assert.IsNotEmpty(message, "Message is empty.");
        }
示例#7
0
        public void SplitByGridAndRemoveEmptyPartsAndMergeIntoNewFile()
        {
            var timedEvents1 = new[]
            {
                new TimedEvent(new TextEvent("A1"), 0),
                new TimedEvent(new SetTempoEvent(100000), 10),
                new TimedEvent(new TextEvent("B1"), 90),
                new TimedEvent(new TextEvent("C1"), 210),
                new TimedEvent(new NoteOnEvent(), 270),
                new TimedEvent(new NoteOffEvent(), 320)
            };

            var timedEvents2 = new[]
            {
                new TimedEvent(new TextEvent("A2"), 10),
                new TimedEvent(new TextEvent("B2"), 70),
                new TimedEvent(new TextEvent("C2"), 260)
            };

            var trackChunk1 = timedEvents1.ToTrackChunk();
            var trackChunk2 = timedEvents2.ToTrackChunk();
            var midiFile    = new MidiFile(trackChunk1, trackChunk2);

            var grid     = new SteppedGrid((MidiTimeSpan)100);
            var settings = new SliceMidiFileSettings
            {
                SplitNotes          = false,
                PreserveTimes       = false,
                PreserveTrackChunks = true,
                Markers             = new SliceMidiFileMarkers
                {
                    PartStartMarkerEventFactory = () => new MarkerEvent("S"),
                    PartEndMarkerEventFactory   = () => new MarkerEvent("F"),
                    EmptyPartMarkerEventFactory = () => new MarkerEvent("E")
                }
            };

            var newFiles = midiFile.SplitByGrid(grid, settings).ToList();

            Assert.AreEqual(4, newFiles.Count, "New files count is invalid.");

            //

            var nonEmptyParts = newFiles.Where(f =>
            {
                var newTimedEvents = f.GetTimedEvents().ToArray();
                return(newTimedEvents.Any() && !newTimedEvents.Any(e => MidiEvent.Equals(e.Event, new MarkerEvent("E"))));
            })
                                .ToArray();

            Assert.AreEqual(3, nonEmptyParts.Length, "Non-empty new files count is invalid.");

            //

            var trackChunksCount = midiFile.GetTrackChunks().Count();
            var newTrackChunks   = new List <TrackChunk>();

            for (var i = 0; i < trackChunksCount; i++)
            {
                var trackChunk = new TrackChunk();

                foreach (var part in nonEmptyParts)
                {
                    trackChunk.Events.AddRange(part.GetTrackChunks().ElementAt(i).Events);
                }

                newTrackChunks.Add(trackChunk);
            }

            var resultFile = new MidiFile(newTrackChunks)
            {
                TimeDivision = midiFile.TimeDivision
            };

            //

            var equalityCheckSettings = new MidiEventEqualityCheckSettings
            {
                CompareDeltaTimes = false
            };

            resultFile.RemoveTimedEvents(e =>
                                         MidiEvent.Equals(e.Event, new MarkerEvent("S"), equalityCheckSettings) ||
                                         MidiEvent.Equals(e.Event, new MarkerEvent("F"), equalityCheckSettings) ||
                                         MidiEvent.Equals(e.Event, new MarkerEvent("E"), equalityCheckSettings));

            //

            CompareTimedEvents(
                resultFile.GetTimedEvents(),
                new[]
            {
                new TimedEvent(new TextEvent("A1"), 0),
                new TimedEvent(new SetTempoEvent(100000), 10),
                new TimedEvent(new TextEvent("A2"), 10),
                new TimedEvent(new TextEvent("B2"), 70),
                new TimedEvent(new TextEvent("B1"), 90),
                new TimedEvent(new SetTempoEvent(100000), 100),
                new TimedEvent(new TextEvent("C1"), 110),
                new TimedEvent(new TextEvent("C2"), 160),
                new TimedEvent(new NoteOnEvent(), 170),
                new TimedEvent(new SetTempoEvent(100000), 200),
                new TimedEvent(new NoteOffEvent(), 220)
            },
                "Result file contains invalid events.");
        }
示例#8
0
        public static bool Equals(EventsCollection eventsCollection1, EventsCollection eventsCollection2, MidiEventEqualityCheckSettings settings, out string message)
        {
            message = null;

            if (ReferenceEquals(eventsCollection1, eventsCollection2))
            {
                return(true);
            }

            if (ReferenceEquals(null, eventsCollection1) || ReferenceEquals(null, eventsCollection2))
            {
                message = "One of events collections is null.";
                return(false);
            }

            if (eventsCollection1.Count != eventsCollection2.Count)
            {
                message = $"Counts of events are different ({eventsCollection1.Count} vs {eventsCollection2.Count}).";
                return(false);
            }

            for (var i = 0; i < eventsCollection1.Count; i++)
            {
                var event1 = eventsCollection1[i];
                var event2 = eventsCollection2[i];

                string eventsComparingMessage;
                if (!MidiEvent.Equals(event1, event2, settings, out eventsComparingMessage))
                {
                    message = $"Events at position {i} are different. {eventsComparingMessage}";
                    return(false);
                }
            }

            return(true);
        }
示例#9
0
 public MidiEventEqualityComparer(MidiEventEqualityCheckSettings settings)
 {
     _settings = settings ?? new MidiEventEqualityCheckSettings();
 }