mirror of
https://github.com/ppy/osu.git
synced 2024-11-06 06:17:23 +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>
|
||||
/// The point in the beatmap at which the final ramping rate should be reached.
|
||||
/// </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")]
|
||||
public abstract BindableNumber<double> InitialRate { get; }
|
||||
@ -71,7 +71,7 @@ namespace osu.Game.Rulesets.Mods
|
||||
SpeedChange.SetDefault();
|
||||
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user