[Add] Master Category
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
using YachtDice.Categories;
|
||||
using YachtDice.Dice;
|
||||
using YachtDice.Scoring;
|
||||
using YachtDice.UI.Presentation;
|
||||
|
||||
namespace YachtDice.Tests
|
||||
{
|
||||
public class MasterCategoryTests
|
||||
{
|
||||
private readonly List<Object> _createdAssets = new();
|
||||
private DiceDefinition _standardDice;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_standardDice = DiceDefinition.CreateForTest<StandardDice>("d6", "d6");
|
||||
_createdAssets.Add(_standardDice);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
foreach (var scoring in Object.FindObjectsByType<ScoringSystem>(FindObjectsSortMode.None))
|
||||
Object.DestroyImmediate(scoring.gameObject);
|
||||
|
||||
for (var i = 0; i < _createdAssets.Count; i++)
|
||||
{
|
||||
if (_createdAssets[i] != null)
|
||||
Object.DestroyImmediate(_createdAssets[i]);
|
||||
}
|
||||
|
||||
_createdAssets.Clear();
|
||||
}
|
||||
|
||||
private IReadOnlyList<IDice> CreateDice(params int[] values)
|
||||
{
|
||||
var dice = new DiceInstance[values.Length];
|
||||
|
||||
for (var i = 0; i < values.Length; i++)
|
||||
dice[i] = new DiceInstance(_standardDice, values[i]);
|
||||
|
||||
return dice;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MasterValueCategory_AddsConfiguredBonus_AndKeepsDefaultZero()
|
||||
{
|
||||
var withBonus = MasterValueCategory.CreateForTest("ones_bonus", "Единицы", 1, categoryBonus: 1);
|
||||
var noBonus = MasterValueCategory.CreateForTest("ones_plain", "Единицы", 1);
|
||||
_createdAssets.Add(withBonus);
|
||||
_createdAssets.Add(noBonus);
|
||||
|
||||
Assert.AreEqual(5, withBonus.Calculate(CreateDice(1, 1, 1, 2, 3, 4)));
|
||||
Assert.AreEqual(4, noBonus.Calculate(CreateDice(1, 1, 1, 1, 5, 6)));
|
||||
Assert.AreEqual(0, withBonus.Calculate(CreateDice(2, 2, 3, 4, 5, 6)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MasterStraightCategory_RequiresExactOneToSix()
|
||||
{
|
||||
var category = MasterStraightCategory.CreateForTest("straight", "Стрит", flatBonus: 20);
|
||||
_createdAssets.Add(category);
|
||||
|
||||
Assert.AreEqual(41, category.Calculate(CreateDice(1, 2, 3, 4, 5, 6)));
|
||||
Assert.AreEqual(0, category.Calculate(CreateDice(1, 2, 3, 4, 5, 5)));
|
||||
Assert.AreEqual(0, category.Calculate(CreateDice(1, 2, 3, 4, 5, 6, 6)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MasterGroupedSetsCategory_SmallFullScoresThreePairs()
|
||||
{
|
||||
var category = MasterGroupedSetsCategory.CreateForTest("small_full", "Малый фул", 2, 3, flatBonus: 10);
|
||||
_createdAssets.Add(category);
|
||||
|
||||
Assert.AreEqual(40, category.Calculate(CreateDice(4, 4, 5, 5, 6, 6)));
|
||||
Assert.AreEqual(28, category.Calculate(CreateDice(1, 1, 3, 3, 5, 5)));
|
||||
Assert.AreEqual(0, category.Calculate(CreateDice(1, 1, 1, 3, 3, 5)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MasterGroupedSetsCategory_BigFullScoresTwoTriples()
|
||||
{
|
||||
var category = MasterGroupedSetsCategory.CreateForTest("big_full", "Большой фул", 3, 2, flatBonus: 10);
|
||||
_createdAssets.Add(category);
|
||||
|
||||
Assert.AreEqual(43, category.Calculate(CreateDice(5, 5, 5, 6, 6, 6)));
|
||||
Assert.AreEqual(34, category.Calculate(CreateDice(3, 3, 3, 4, 4, 4)));
|
||||
Assert.AreEqual(0, category.Calculate(CreateDice(5, 5, 5, 6, 6, 1)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MasterKindCategory_UsesOnlyRequiredGroup()
|
||||
{
|
||||
var kare = MasterKindCategory.CreateForTest("kare", "Каре", 4, valueBonusMultiplier: 1);
|
||||
var poker = MasterKindCategory.CreateForTest("poker", "Покер", 5, valueBonusMultiplier: 2);
|
||||
var master = MasterKindCategory.CreateForTest("master", "Мастер", 6, valueBonusMultiplier: 3);
|
||||
_createdAssets.Add(kare);
|
||||
_createdAssets.Add(poker);
|
||||
_createdAssets.Add(master);
|
||||
|
||||
Assert.AreEqual(30, kare.Calculate(CreateDice(6, 6, 6, 6, 2, 1)));
|
||||
Assert.AreEqual(42, poker.Calculate(CreateDice(6, 6, 6, 6, 6, 1)));
|
||||
Assert.AreEqual(54, master.Calculate(CreateDice(6, 6, 6, 6, 6, 6)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MasterKindCategory_ScalesToMoreDice_AndPicksBestAvailableGroup()
|
||||
{
|
||||
var category = MasterKindCategory.CreateForTest("kare", "Каре", 4, valueBonusMultiplier: 1, flatBonus: 3);
|
||||
_createdAssets.Add(category);
|
||||
|
||||
Assert.AreEqual(33, category.Calculate(CreateDice(6, 6, 6, 6, 6, 2, 1, 1)));
|
||||
Assert.AreEqual(0, category.Calculate(CreateDice(2, 2, 2, 3, 3, 3, 4, 5)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChanceCategory_RemainsUnchanged_WithSixDice()
|
||||
{
|
||||
var chance = SumAllCategory.CreateForTest("chance", "Шанс");
|
||||
_createdAssets.Add(chance);
|
||||
|
||||
Assert.AreEqual(21, chance.Calculate(CreateDice(1, 2, 3, 4, 5, 6)));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ScoreSummaryService_UsesCatalogConfiguredUpperBonus()
|
||||
{
|
||||
var ones = MasterValueCategory.CreateForTest("ones", "Единицы", 1, categoryBonus: 1);
|
||||
var twos = MasterValueCategory.CreateForTest("twos", "Двойки", 2, categoryBonus: 2);
|
||||
var catalog = CategoryCatalog.CreateForTest(new List<CategoryDefinition> { ones, twos }, upperBonusThreshold: 15, upperBonusValue: 50);
|
||||
_createdAssets.Add(ones);
|
||||
_createdAssets.Add(twos);
|
||||
_createdAssets.Add(catalog);
|
||||
|
||||
var go = new GameObject("ScoringSystem");
|
||||
var scoringSystem = go.AddComponent<ScoringSystem>();
|
||||
scoringSystem.Construct(null, null, catalog, null);
|
||||
|
||||
scoringSystem.ScoreCategory(CreateDice(1, 1, 1, 1, 2, 3), ones);
|
||||
scoringSystem.ScoreCategory(CreateDice(2, 2, 2, 2, 5, 6), twos);
|
||||
|
||||
var summaryService = new ScoreSummaryService(scoringSystem, catalog);
|
||||
var summary = summaryService.Calculate();
|
||||
|
||||
Assert.AreEqual(16, summary.UpperSum);
|
||||
Assert.IsTrue(summary.HasUpperBonus);
|
||||
Assert.AreEqual(66, summary.DisplayTotal);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f1f7c8d8f3a4a34bb5327f9fd0dc101
|
||||
Reference in New Issue
Block a user