public static bool IsEmptyTrackChunk(MidiChunk chunk) { if (chunk == null) { return(true); } else if (chunk.GetType() != typeof(TrackChunk)) { return(false); } TrackChunk track = (TrackChunk)chunk; foreach (MidiEvent currentEvent in track.Events) { Type eventType = currentEvent.GetType(); if (eventType == typeof(NoteOnEvent) || eventType == typeof(SetTempoEvent)) { return(false); } } return(true); }
public void CompareWithSelf_WithDefaultSettings() { var trackChunk = new TrackChunk(); var areEqual = MidiChunk.Equals(trackChunk, trackChunk); Assert.IsTrue(areEqual, "Chunk isn't equal to self."); }
public static bool AreEqual(MidiChunk chunk1, MidiChunk chunk2) { if (ReferenceEquals(chunk1, chunk2)) { return(true); } if (ReferenceEquals(null, chunk1) || ReferenceEquals(null, chunk2)) { return(false); } if (chunk1.GetType() != chunk2.GetType()) { return(false); } Func <MidiChunk, MidiChunk, bool> comparer; if (Comparers.TryGetValue(chunk1.GetType(), out comparer)) { return(comparer(chunk1, chunk2)); } return(true); }
public void CompareWithNull() { var trackChunk = new TrackChunk(); var areEqual = MidiChunk.Equals(trackChunk, null, out var message); Assert.IsFalse(areEqual, "Chunk is equal to null."); Assert.IsNotNull(message, "Message is null."); Assert.IsNotEmpty(message, "Message is empty."); }
public void CompareTrackChunks_SameEventsCount_SameEvents() { var trackChunk1 = new TrackChunk(new NoteOnEvent()); var trackChunk2 = new TrackChunk(new NoteOnEvent()); var areEqual = MidiChunk.Equals(trackChunk1, trackChunk2, out var message); Assert.IsTrue(areEqual, "Chunks aren't equal."); Assert.IsNull(message, "Message isn't null."); }
public void CompareCustomChunks_WithEqualsOverride_Equal() { var customChunk1 = new CustomChunkWithEqualsOverride(); var customChunk2 = new CustomChunkWithEqualsOverride(); var areEqual = MidiChunk.Equals(customChunk1, customChunk2, out var message); Assert.IsTrue(areEqual, "Chunks aren't equal."); Assert.IsNull(message, "Message isn't null."); }
public void CompareTrackChunks_SameEventsCount_DifferentEvents() { var trackChunk1 = new TrackChunk(new NoteOnEvent()); var trackChunk2 = new TrackChunk(new NoteOffEvent()); var areEqual = MidiChunk.Equals(trackChunk1, trackChunk2, out var message); Assert.IsFalse(areEqual, "Chunks are equal."); Assert.IsNotNull(message, "Message is null."); Assert.IsNotEmpty(message, "Message is empty."); }
public void CompareCustomChunks_WithEqualsOverride_Different() { var customChunk1 = new CustomChunkWithEqualsOverride(); var customChunk2 = new CustomChunkWithEqualsOverride(8); var areEqual = MidiChunk.Equals(customChunk1, customChunk2, out var message); Assert.IsFalse(areEqual, "Chunks are equal."); Assert.IsNotNull(message, "Message is null."); Assert.IsNotEmpty(message, "Message is empty."); }
public void CompareChunksOfDifferentType() { var trackChunk = new TrackChunk(); var customChunk = new CustomChunkWithoutEqualsOverride(); var areEqual = MidiChunk.Equals(trackChunk, customChunk, out var message); Assert.IsFalse(areEqual, "Chunks are equal."); Assert.IsNotNull(message, "Message is null."); Assert.IsNotEmpty(message, "Message is empty."); }
public static bool Equals(MidiFile midiFile1, MidiFile midiFile2, MidiFileEqualityCheckSettings settings, out string message) { message = null; if (ReferenceEquals(midiFile1, midiFile2)) { return(true); } if (ReferenceEquals(null, midiFile1) || ReferenceEquals(null, midiFile2)) { message = "One of files is null."; return(false); } if (settings.CompareOriginalFormat) { var originalFormat1 = midiFile1._originalFormat; var originalFormat2 = midiFile2._originalFormat; if (originalFormat1 != originalFormat2) { message = $"Original formats are different ({originalFormat1} vs {originalFormat2})."; return(false); } } var chunks1 = midiFile1.Chunks; var chunks2 = midiFile2.Chunks; if (chunks1.Count != chunks2.Count) { message = $"Counts of chunks are different ({chunks1.Count} vs {chunks2.Count})."; return(false); } for (var i = 0; i < chunks1.Count; i++) { var chunk1 = chunks1[i]; var chunk2 = chunks2[i]; string chunksComparingMessage; if (!MidiChunk.Equals(chunk1, chunk2, settings.ChunkEqualityCheckSettings, out chunksComparingMessage)) { message = $"Chunks at position {i} are different. {chunksComparingMessage}"; return(false); } } return(true); }
public void CompareTrackChunks_CompareDeltaTimes_DifferentDeltaTimes() { var trackChunk1 = new TrackChunk(new NoteOnEvent { DeltaTime = 100 }); var trackChunk2 = new TrackChunk(new NoteOnEvent { DeltaTime = 1000 }); var areEqual = MidiChunk.Equals(trackChunk1, trackChunk2, out var message); Assert.IsFalse(areEqual, "Chunks are equal."); Assert.IsNotNull(message, "Message is null."); Assert.IsNotEmpty(message, "Message is empty."); }
public void CompareWithSelf_WithCustomSettings() { var trackChunk = new TrackChunk(); var areEqual = MidiChunk.Equals( trackChunk, trackChunk, new MidiChunkEqualityCheckSettings { EventEqualityCheckSettings = new MidiEventEqualityCheckSettings { CompareDeltaTimes = false } }, out var message); Assert.IsTrue(areEqual, "Chunk isn't equal to self."); Assert.IsNull(message, "Message isn't null."); }
public void CompareTrackChunks_DontCompareDeltaTimes(long firstDeltaTime, long secondDeltaTime) { var trackChunk1 = new TrackChunk(new NoteOnEvent { DeltaTime = firstDeltaTime }); var trackChunk2 = new TrackChunk(new NoteOnEvent { DeltaTime = secondDeltaTime }); var areEqual = MidiChunk.Equals( trackChunk1, trackChunk2, new MidiChunkEqualityCheckSettings { EventEqualityCheckSettings = new MidiEventEqualityCheckSettings { CompareDeltaTimes = false } }, out var message); Assert.IsTrue(areEqual, "Chunks aren't equal."); Assert.IsNull(message, "Message isn't null."); }
public static bool Equals(MidiChunk midiChunk1, MidiChunk midiChunk2, MidiChunkEqualityCheckSettings settings, out string message) { message = null; if (ReferenceEquals(midiChunk1, midiChunk2)) { return(true); } if (ReferenceEquals(null, midiChunk1) || ReferenceEquals(null, midiChunk2)) { message = "One of chunks is null."; return(false); } var type1 = midiChunk1.GetType(); var type2 = midiChunk2.GetType(); if (type1 != type2) { message = $"Types of chunks are different ({type1} vs {type2})."; return(false); } var trackChunk1 = midiChunk1 as TrackChunk; if (trackChunk1 != null) { var trackChunk2 = (TrackChunk)midiChunk2; var events1 = trackChunk1.Events; var events2 = trackChunk2.Events; if (events1.Count != events2.Count) { message = $"Counts of events in track chunks are different ({events1.Count} vs {events2.Count})."; return(false); } for (var i = 0; i < events1.Count; i++) { var event1 = events1[i]; var event2 = events2[i]; string eventsComparingMessage; if (!MidiEvent.Equals(event1, event2, settings.EventEqualityCheckSettings, out eventsComparingMessage)) { message = $"Events at position {i} in track chunks are different. {eventsComparingMessage}"; return(false); } } return(true); } var unknownChunk1 = midiChunk1 as UnknownChunk; if (unknownChunk1 != null) { var unknownChunk2 = (UnknownChunk)midiChunk2; var chunkId1 = unknownChunk1.ChunkId; var chunkId2 = unknownChunk2.ChunkId; if (chunkId1 != chunkId2) { message = $"IDs of unknown chunks are different ({chunkId1} vs {chunkId2})."; return(false); } if (!ArrayUtilities.Equals(unknownChunk1.Data, unknownChunk2.Data)) { message = "Unknown chunks data are different."; return(false); } return(true); } return(midiChunk1.Equals(midiChunk2)); }
public void GetStandardChunkIds() { var ids = MidiChunk.GetStandardChunkIds(); CollectionAssert.AreEqual(new[] { "MThd", "MTrk" }, ids, "IDs are invalid."); }
public static bool Equals(MidiChunk midiChunk1, MidiChunk midiChunk2, MidiChunkEqualityCheckSettings settings, out string message) { message = null; if (ReferenceEquals(midiChunk1, midiChunk2)) { return(true); } if (ReferenceEquals(null, midiChunk1) || ReferenceEquals(null, midiChunk2)) { message = "One of chunks is null."; return(false); } var type1 = midiChunk1.GetType(); var type2 = midiChunk2.GetType(); if (type1 != type2) { message = $"Types of chunks are different ({type1} vs {type2})."; return(false); } var trackChunk1 = midiChunk1 as TrackChunk; if (trackChunk1 != null) { var trackChunk2 = (TrackChunk)midiChunk2; return(EventsCollectionEquality.Equals(trackChunk1.Events, trackChunk2.Events, settings.EventEqualityCheckSettings, out message)); } var unknownChunk1 = midiChunk1 as UnknownChunk; if (unknownChunk1 != null) { var unknownChunk2 = (UnknownChunk)midiChunk2; var chunkId1 = unknownChunk1.ChunkId; var chunkId2 = unknownChunk2.ChunkId; if (chunkId1 != chunkId2) { message = $"IDs of unknown chunks are different ({chunkId1} vs {chunkId2})."; return(false); } if (!ArrayUtilities.Equals(unknownChunk1.Data, unknownChunk2.Data)) { message = "Unknown chunks data are different."; return(false); } return(true); } var result = midiChunk1.Equals(midiChunk2); if (!result) { message = $"Chunks {midiChunk1} and {midiChunk2} are not equal by result of Equals call on first chunk."; } return(result); }