mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-21 09:05:10 -07:00
[Game] Playmats (#7101)
* [Game] Playmats Took 19 seconds Took 1 minute * [Playmats] Add fixed override and configurable fallbacks to settings. Took 29 minutes Took 43 seconds * Add main to test. Took 1 minute Took 29 seconds * Move settings to own group Took 11 minutes * Some attempts to refresh macOS compositor Took 2 minutes * Try something else Took 17 minutes * Don't manipulate live list Took 11 minutes * Change things about resolution, address comments. Took 45 minutes Took 12 minutes * Comments. Took 14 minutes Took 8 seconds * Re-order settings menu location Took 2 minutes * Rename PlaymatResolution to Info and add enums Took 8 minutes --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
74a454552a
commit
9eafd90a91
52 changed files with 1931 additions and 28 deletions
126
tests/playmat_resolver_test.cpp
Normal file
126
tests/playmat_resolver_test.cpp
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
#include <gtest/gtest.h>
|
||||
#include <libcockatrice/deck_list/deck_list.h>
|
||||
#include <libcockatrice/deck_list/playmat_resolver.h>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
PlaymatInfo makePlaymatInfo(const QString &name, const QString &providerId = QString())
|
||||
{
|
||||
PlaymatInfo info;
|
||||
info.card = {name, providerId};
|
||||
return info;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(PlaymatResolverTest, EmptyChainReturnsEmpty)
|
||||
{
|
||||
DeckList deck;
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, {}, PlaymatFallbackModeFixed, 0);
|
||||
EXPECT_TRUE(resolved.card.isEmpty());
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, OverrideWinsOverDeckAndFallback)
|
||||
{
|
||||
DeckList deck;
|
||||
deck.setPlaymat({{QStringLiteral("Deck Mat"), QStringLiteral("deck-provider")}, {}});
|
||||
|
||||
const PlaymatInfo force = makePlaymatInfo(QStringLiteral("Force Mat"), QStringLiteral("force-provider"));
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("Fallback Mat"))};
|
||||
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, force, fallback, PlaymatFallbackModeFixed, 0);
|
||||
EXPECT_EQ(resolved.card.name, QStringLiteral("Force Mat"));
|
||||
EXPECT_EQ(resolved.card.providerId, QStringLiteral("force-provider"));
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, DeckWinsOverFallback)
|
||||
{
|
||||
DeckList deck;
|
||||
deck.setPlaymat({{QStringLiteral("Deck Mat"), QStringLiteral("deck-provider")}, {0.1, 0.2, 0.3, 1.5}});
|
||||
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("Fallback Mat"))};
|
||||
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, fallback, PlaymatFallbackModeFixed, 0);
|
||||
EXPECT_EQ(resolved.card.name, QStringLiteral("Deck Mat"));
|
||||
EXPECT_EQ(resolved.card.providerId, QStringLiteral("deck-provider"));
|
||||
EXPECT_DOUBLE_EQ(resolved.params.marginPctL, 0.1);
|
||||
EXPECT_DOUBLE_EQ(resolved.params.verticalOffset, 0.3);
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, FallbackUsedWhenDeckHasNone)
|
||||
{
|
||||
DeckList deck;
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("Fallback Mat"))};
|
||||
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, fallback, PlaymatFallbackModeFixed, 0);
|
||||
EXPECT_EQ(resolved.card.name, QStringLiteral("Fallback Mat"));
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, FixedAlwaysUsesFirst)
|
||||
{
|
||||
DeckList deck;
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("First")),
|
||||
makePlaymatInfo(QStringLiteral("Second"))};
|
||||
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, fallback, PlaymatFallbackModeFixed, i);
|
||||
EXPECT_EQ(resolved.card.name, QStringLiteral("First"));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, RoundRobinCyclesAndWraps)
|
||||
{
|
||||
DeckList deck;
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("First")),
|
||||
makePlaymatInfo(QStringLiteral("Second")),
|
||||
makePlaymatInfo(QStringLiteral("Third"))};
|
||||
|
||||
const QStringList expected = {QStringLiteral("First"), QStringLiteral("Second"), QStringLiteral("Third"),
|
||||
QStringLiteral("First"), QStringLiteral("Second"), QStringLiteral("Third")};
|
||||
for (int i = 0; i < expected.size(); ++i) {
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, fallback, PlaymatFallbackModeRoundRobin, i);
|
||||
EXPECT_EQ(resolved.card.name, expected.at(i));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, RoundRobinRespectsCursor)
|
||||
{
|
||||
DeckList deck;
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("First")),
|
||||
makePlaymatInfo(QStringLiteral("Second"))};
|
||||
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, fallback, PlaymatFallbackModeRoundRobin, 5);
|
||||
EXPECT_EQ(resolved.card.name, QStringLiteral("Second")); // 5 % 2 == 1
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, RandomStaysWithinList)
|
||||
{
|
||||
DeckList deck;
|
||||
const QList<PlaymatInfo> fallback = {makePlaymatInfo(QStringLiteral("First")),
|
||||
makePlaymatInfo(QStringLiteral("Second")),
|
||||
makePlaymatInfo(QStringLiteral("Third"))};
|
||||
|
||||
for (int i = 0; i < 50; ++i) {
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, {}, fallback, PlaymatFallbackModeRandom, i);
|
||||
ASSERT_FALSE(resolved.card.name.isEmpty());
|
||||
EXPECT_TRUE(fallback.contains(resolved));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PlaymatResolverTest, ForceWithEmptyCardIgnoresFallbackParamsButNotFallback)
|
||||
{
|
||||
DeckList deck;
|
||||
deck.setPlaymat({{QStringLiteral("Deck Mat")}, {}});
|
||||
|
||||
// An empty force entry must not mask the deck-configured playmat.
|
||||
const PlaymatInfo emptyForce;
|
||||
const PlaymatInfo resolved = resolveEffectivePlaymat(deck, emptyForce, {}, PlaymatFallbackModeFixed, 0);
|
||||
EXPECT_EQ(resolved.card.name, QStringLiteral("Deck Mat"));
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue