mirror of
https://github.com/osukey/osukey.git
synced 2025-07-02 00:40:09 +09:00
Use redundancy test
This commit is contained in:
@ -29,11 +29,17 @@ namespace osu.Game.Tests.NonVisual
|
|||||||
var cpi = new ControlPointInfo();
|
var cpi = new ControlPointInfo();
|
||||||
|
|
||||||
cpi.Add(0, new TimingControlPoint()); // is *not* redundant, special exception for first timing point.
|
cpi.Add(0, new TimingControlPoint()); // is *not* redundant, special exception for first timing point.
|
||||||
cpi.Add(1000, new TimingControlPoint()); // is redundant
|
cpi.Add(1000, new TimingControlPoint()); // is also not redundant, due to change of offset
|
||||||
|
|
||||||
Assert.That(cpi.Groups.Count, Is.EqualTo(1));
|
Assert.That(cpi.Groups.Count, Is.EqualTo(2));
|
||||||
Assert.That(cpi.TimingPoints.Count, Is.EqualTo(1));
|
Assert.That(cpi.TimingPoints.Count, Is.EqualTo(2));
|
||||||
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(1));
|
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(2));
|
||||||
|
|
||||||
|
cpi.Add(1000, new TimingControlPoint()); //is redundant
|
||||||
|
|
||||||
|
Assert.That(cpi.Groups.Count, Is.EqualTo(2));
|
||||||
|
Assert.That(cpi.TimingPoints.Count, Is.EqualTo(2));
|
||||||
|
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -86,11 +92,12 @@ namespace osu.Game.Tests.NonVisual
|
|||||||
Assert.That(cpi.EffectPoints.Count, Is.EqualTo(0));
|
Assert.That(cpi.EffectPoints.Count, Is.EqualTo(0));
|
||||||
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(0));
|
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(0));
|
||||||
|
|
||||||
cpi.Add(1000, new EffectControlPoint { KiaiMode = true }); // is not redundant
|
cpi.Add(1000, new EffectControlPoint { KiaiMode = true, OmitFirstBarLine = true }); // is not redundant
|
||||||
|
cpi.Add(1400, new EffectControlPoint { KiaiMode = true, OmitFirstBarLine = true }); // same settings, but is not redundant
|
||||||
|
|
||||||
Assert.That(cpi.Groups.Count, Is.EqualTo(1));
|
Assert.That(cpi.Groups.Count, Is.EqualTo(2));
|
||||||
Assert.That(cpi.EffectPoints.Count, Is.EqualTo(1));
|
Assert.That(cpi.EffectPoints.Count, Is.EqualTo(2));
|
||||||
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(1));
|
Assert.That(cpi.AllControlPoints.Count(), Is.EqualTo(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -25,6 +25,14 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
/// <returns>Whether equivalent.</returns>
|
/// <returns>Whether equivalent.</returns>
|
||||||
public abstract bool EquivalentTo(ControlPoint other);
|
public abstract bool EquivalentTo(ControlPoint other);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether this control point results in a meaningful change when placed after another.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="other">Another control point to compare with.</param>
|
||||||
|
/// <param name="time">The time this timing point will be placed at.</param>
|
||||||
|
/// <returns>Whether redundant.</returns>
|
||||||
|
public abstract bool IsRedundant(ControlPoint other, double time);
|
||||||
|
|
||||||
public bool Equals(ControlPoint other) => Time == other?.Time && EquivalentTo(other);
|
public bool Equals(ControlPoint other) => Time == other?.Time && EquivalentTo(other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return existing?.EquivalentTo(newPoint) == true;
|
return newPoint.IsRedundant(existing, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void groupItemAdded(ControlPoint controlPoint)
|
private void groupItemAdded(ControlPoint controlPoint)
|
||||||
|
@ -29,5 +29,6 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
|
|
||||||
public override bool EquivalentTo(ControlPoint other) =>
|
public override bool EquivalentTo(ControlPoint other) =>
|
||||||
other is DifficultyControlPoint otherTyped && otherTyped.SpeedMultiplier.Equals(SpeedMultiplier);
|
other is DifficultyControlPoint otherTyped && otherTyped.SpeedMultiplier.Equals(SpeedMultiplier);
|
||||||
|
public override bool IsRedundant(ControlPoint other, double time) => EquivalentTo(other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,5 +38,6 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
public override bool EquivalentTo(ControlPoint other) =>
|
public override bool EquivalentTo(ControlPoint other) =>
|
||||||
other is EffectControlPoint otherTyped &&
|
other is EffectControlPoint otherTyped &&
|
||||||
KiaiMode == otherTyped.KiaiMode && OmitFirstBarLine == otherTyped.OmitFirstBarLine;
|
KiaiMode == otherTyped.KiaiMode && OmitFirstBarLine == otherTyped.OmitFirstBarLine;
|
||||||
|
public override bool IsRedundant(ControlPoint other, double time) => !OmitFirstBarLine && EquivalentTo(other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,5 +71,6 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
public override bool EquivalentTo(ControlPoint other) =>
|
public override bool EquivalentTo(ControlPoint other) =>
|
||||||
other is SampleControlPoint otherTyped &&
|
other is SampleControlPoint otherTyped &&
|
||||||
SampleBank == otherTyped.SampleBank && SampleVolume == otherTyped.SampleVolume;
|
SampleBank == otherTyped.SampleBank && SampleVolume == otherTyped.SampleVolume;
|
||||||
|
public override bool IsRedundant(ControlPoint other, double time) => EquivalentTo(other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,10 @@ namespace osu.Game.Beatmaps.ControlPoints
|
|||||||
|
|
||||||
public override bool EquivalentTo(ControlPoint other) =>
|
public override bool EquivalentTo(ControlPoint other) =>
|
||||||
other is TimingControlPoint otherTyped
|
other is TimingControlPoint otherTyped
|
||||||
&& Time == otherTyped.Time && TimeSignature == otherTyped.TimeSignature && BeatLength.Equals(otherTyped.BeatLength);
|
&& TimeSignature == otherTyped.TimeSignature && BeatLength.Equals(otherTyped.BeatLength);
|
||||||
|
|
||||||
|
public override bool IsRedundant(ControlPoint other, double time) =>
|
||||||
|
EquivalentTo(other)
|
||||||
|
&& other.Time == time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user