mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 22:33:05 +08:00
Add failing test cases
This commit is contained in:
parent
fec3bd898e
commit
81b052b866
82
osu.Game.Tests/Rulesets/Mods/ModTimeRampTest.cs
Normal file
82
osu.Game.Tests/Rulesets/Mods/ModTimeRampTest.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Framework.Audio.Track;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Mods;
|
||||||
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
|
|
||||||
|
namespace osu.Game.Tests.Rulesets.Mods
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class ModTimeRampTest
|
||||||
|
{
|
||||||
|
private const double start_time = 1000;
|
||||||
|
private const double duration = 9000;
|
||||||
|
|
||||||
|
private TrackVirtual track;
|
||||||
|
private IBeatmap beatmap;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void SetUp()
|
||||||
|
{
|
||||||
|
track = new TrackVirtual(20_000);
|
||||||
|
beatmap = new Beatmap
|
||||||
|
{
|
||||||
|
HitObjects =
|
||||||
|
{
|
||||||
|
new Spinner
|
||||||
|
{
|
||||||
|
StartTime = start_time,
|
||||||
|
Duration = duration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(0, 1)]
|
||||||
|
[TestCase(start_time, 1)]
|
||||||
|
[TestCase(start_time + duration * ModTimeRamp.FINAL_RATE_PROGRESS / 2, 1.25)]
|
||||||
|
[TestCase(start_time + duration * ModTimeRamp.FINAL_RATE_PROGRESS, 1.5)]
|
||||||
|
[TestCase(start_time + duration, 1.5)]
|
||||||
|
[TestCase(15000, 1.5)]
|
||||||
|
public void TestModWindUp(double time, double expectedRate)
|
||||||
|
{
|
||||||
|
var mod = new ModWindUp();
|
||||||
|
mod.ApplyToBeatmap(beatmap);
|
||||||
|
mod.ApplyToTrack(track);
|
||||||
|
|
||||||
|
seekTrackAndUpdateMod(mod, time);
|
||||||
|
|
||||||
|
Assert.That(mod.SpeedChange.Value, Is.EqualTo(expectedRate));
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(0, 1)]
|
||||||
|
[TestCase(start_time, 1)]
|
||||||
|
[TestCase(start_time + duration * ModTimeRamp.FINAL_RATE_PROGRESS / 2, 0.75)]
|
||||||
|
[TestCase(start_time + duration * ModTimeRamp.FINAL_RATE_PROGRESS, 0.5)]
|
||||||
|
[TestCase(start_time + duration, 0.5)]
|
||||||
|
[TestCase(15000, 0.5)]
|
||||||
|
public void TestModWindDown(double time, double expectedRate)
|
||||||
|
{
|
||||||
|
var mod = new ModWindDown
|
||||||
|
{
|
||||||
|
FinalRate = { Value = 0.5 }
|
||||||
|
};
|
||||||
|
mod.ApplyToBeatmap(beatmap);
|
||||||
|
mod.ApplyToTrack(track);
|
||||||
|
|
||||||
|
seekTrackAndUpdateMod(mod, time);
|
||||||
|
|
||||||
|
Assert.That(mod.SpeedChange.Value, Is.EqualTo(expectedRate));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void seekTrackAndUpdateMod(ModTimeRamp mod, double time)
|
||||||
|
{
|
||||||
|
track.Seek(time);
|
||||||
|
// update the mod via a fake playfield to re-calculate the current rate.
|
||||||
|
mod.Update(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The point in the beatmap at which the final ramping rate should be reached.
|
/// The point in the beatmap at which the final ramping rate should be reached.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const double final_rate_progress = 0.75f;
|
public const double FINAL_RATE_PROGRESS = 0.75f;
|
||||||
|
|
||||||
[SettingSource("Initial rate", "The starting speed of the track")]
|
[SettingSource("Initial rate", "The starting speed of the track")]
|
||||||
public abstract BindableNumber<double> InitialRate { get; }
|
public abstract BindableNumber<double> InitialRate { get; }
|
||||||
@ -71,7 +71,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
SpeedChange.SetDefault();
|
SpeedChange.SetDefault();
|
||||||
|
|
||||||
beginRampTime = beatmap.HitObjects.FirstOrDefault()?.StartTime ?? 0;
|
beginRampTime = beatmap.HitObjects.FirstOrDefault()?.StartTime ?? 0;
|
||||||
finalRateTime = final_rate_progress * (lastObject?.GetEndTime() ?? 0);
|
finalRateTime = FINAL_RATE_PROGRESS * (lastObject?.GetEndTime() ?? 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Update(Playfield playfield)
|
public virtual void Update(Playfield playfield)
|
||||||
|
Loading…
Reference in New Issue
Block a user