1
0
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:
Bartłomiej Dach 2021-01-31 20:18:12 +01:00
parent fec3bd898e
commit 81b052b866
2 changed files with 84 additions and 2 deletions

View 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);
}
}
}

View File

@ -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)