baseline: OpenMU upstream b5a0961 (fresh source)
This commit is contained in:
142
tests/MUnique.OpenMU.Tests/ResetProgressionCalculatorTest.cs
Normal file
142
tests/MUnique.OpenMU.Tests/ResetProgressionCalculatorTest.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
// <copyright file="ResetProgressionCalculatorTest.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.Tests;
|
||||
|
||||
using MUnique.OpenMU.DataModel.Configuration.Items;
|
||||
using MUnique.OpenMU.GameLogic.Resets;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for <see cref="ResetProgressionCalculator"/>.
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
public class ResetProgressionCalculatorTest
|
||||
{
|
||||
/// <summary>
|
||||
/// Verifies boundary behavior for point tiers.
|
||||
/// </summary>
|
||||
[TestCase(0, 800)]
|
||||
[TestCase(9, 800)]
|
||||
[TestCase(10, 600)]
|
||||
[TestCase(19, 600)]
|
||||
[TestCase(20, 400)]
|
||||
[TestCase(29, 400)]
|
||||
[TestCase(30, 200)]
|
||||
public void PointsTierBoundaries(int currentResetCount, int expectedPoints)
|
||||
{
|
||||
var configuration = this.CreateTieredConfiguration();
|
||||
|
||||
var progression = ResetProgressionCalculator.Calculate(currentResetCount, 0, configuration);
|
||||
|
||||
Assert.That(progression.PointsForReset, Is.EqualTo(expectedPoints));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies cumulative totals for point tiers.
|
||||
/// </summary>
|
||||
[TestCase(0, 800)]
|
||||
[TestCase(1, 1600)]
|
||||
[TestCase(9, 8000)]
|
||||
[TestCase(10, 8600)]
|
||||
[TestCase(11, 9200)]
|
||||
[TestCase(20, 14400)]
|
||||
public void PointsTierTotals(int currentResetCount, int expectedTotalPoints)
|
||||
{
|
||||
var configuration = this.CreateTieredConfiguration();
|
||||
|
||||
var progression = ResetProgressionCalculator.Calculate(currentResetCount, 0, configuration);
|
||||
|
||||
Assert.That(progression.TotalPointsAfterReset, Is.EqualTo(expectedTotalPoints));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies boundary behavior for item cost tiers with capped final tier.
|
||||
/// </summary>
|
||||
[TestCase(0, 2)]
|
||||
[TestCase(1, 4)]
|
||||
[TestCase(2, 8)]
|
||||
[TestCase(3, 16)]
|
||||
[TestCase(4, 32)]
|
||||
[TestCase(5, 64)]
|
||||
[TestCase(6, 64)]
|
||||
[TestCase(20, 64)]
|
||||
public void ItemCostTierBoundaries(int currentResetCount, int expectedItemAmount)
|
||||
{
|
||||
var configuration = this.CreateTieredConfiguration();
|
||||
|
||||
var progression = ResetProgressionCalculator.Calculate(currentResetCount, 0, configuration);
|
||||
|
||||
Assert.That(progression.RequiredItemAmount, Is.EqualTo(expectedItemAmount));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies legacy fallback behavior when no tier collections are configured.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void LegacyFallbackWhenTiersAreEmpty()
|
||||
{
|
||||
var configuration = new ResetConfiguration
|
||||
{
|
||||
RequiredMoney = 2,
|
||||
MultiplyRequiredMoneyByResetCount = true,
|
||||
PointsPerReset = 300,
|
||||
MultiplyPointsByResetCount = true,
|
||||
PointsTiers = [],
|
||||
ItemCostTiers = [],
|
||||
RequiredResetItem = new ItemDefinition { Name = "Jewel of Creation" },
|
||||
};
|
||||
|
||||
var progression = ResetProgressionCalculator.Calculate(2, 0, configuration);
|
||||
|
||||
Assert.That(progression.NextResetCount, Is.EqualTo(3));
|
||||
Assert.That(progression.RequiredZen, Is.EqualTo(6));
|
||||
Assert.That(progression.PointsForReset, Is.EqualTo(900));
|
||||
Assert.That(progression.TotalPointsAfterReset, Is.EqualTo(900));
|
||||
Assert.That(progression.RequiredItemAmount, Is.EqualTo(0));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies that the per-character points override applies in legacy mode.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void PlayerSpecificPointsOverrideIsAppliedInLegacyMode()
|
||||
{
|
||||
var configuration = new ResetConfiguration
|
||||
{
|
||||
PointsPerReset = 300,
|
||||
MultiplyPointsByResetCount = true,
|
||||
PointsTiers = [],
|
||||
};
|
||||
|
||||
var progression = ResetProgressionCalculator.Calculate(4, 120, configuration);
|
||||
|
||||
Assert.That(progression.PointsForReset, Is.EqualTo(600));
|
||||
Assert.That(progression.TotalPointsAfterReset, Is.EqualTo(600));
|
||||
}
|
||||
|
||||
private ResetConfiguration CreateTieredConfiguration()
|
||||
{
|
||||
return new ResetConfiguration
|
||||
{
|
||||
RequiredResetItem = new ItemDefinition { Name = "Jewel of Creation" },
|
||||
PointsTiers =
|
||||
[
|
||||
new() { MinimumResetCount = 1, PointsGranted = 800 },
|
||||
new() { MinimumResetCount = 11, PointsGranted = 600 },
|
||||
new() { MinimumResetCount = 21, PointsGranted = 400 },
|
||||
new() { MinimumResetCount = 31, PointsGranted = 200 },
|
||||
],
|
||||
ItemCostTiers =
|
||||
[
|
||||
new() { MinimumResetCount = 1, RequiredItemAmount = 2 },
|
||||
new() { MinimumResetCount = 2, RequiredItemAmount = 4 },
|
||||
new() { MinimumResetCount = 3, RequiredItemAmount = 8 },
|
||||
new() { MinimumResetCount = 4, RequiredItemAmount = 16 },
|
||||
new() { MinimumResetCount = 5, RequiredItemAmount = 32 },
|
||||
new() { MinimumResetCount = 6, RequiredItemAmount = 64 },
|
||||
new() { MinimumResetCount = 7, RequiredItemAmount = 64 },
|
||||
],
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user