From 3f56b91ca67c6fa5a407bd5df39808dc742cd693 Mon Sep 17 00:00:00 2001 From: Renaud Guezennec Date: Sun, 29 Dec 2024 14:43:33 +0100 Subject: Fix #62: endless loop with list of values --- src/tests/dice/tst_dice.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'src/tests/dice') diff --git a/src/tests/dice/tst_dice.cpp b/src/tests/dice/tst_dice.cpp index 2de3bcc..d6b9de3 100644 --- a/src/tests/dice/tst_dice.cpp +++ b/src/tests/dice/tst_dice.cpp @@ -24,6 +24,7 @@ #include "diceparser/dicealias.h" #include "diceparser/diceparser.h" +#include "diceparser/diceparserhelper.h" #include "die.h" // node @@ -206,6 +207,9 @@ private slots: void deterministTest(); void deterministTest_data(); + void listValueWithOption(); + void listValueWithOption_data(); + private: std::unique_ptr m_die; std::unique_ptr m_diceParser; @@ -1382,6 +1386,74 @@ void TestDice::deterministTest_data() // 1d6;10d10e10k\$1 } +void TestDice::listValueWithOption() +{ + QFETCH(QString, command); + QFETCH(int, results); + QFETCH(Dice::CompareOperator, theOperator); + QFETCH(bool, error); + + auto parsing= m_diceParser->parseLine(command); + if(!error) + QVERIFY2(parsing, "parsing"); + + if(parsing) + m_diceParser->start(); + + if(error) + { + QVERIFY2(!m_diceParser->humanReadableError().isEmpty() || !m_diceParser->humanReadableWarning().isEmpty(), + "no error"); + return; + } + else + { + QVERIFY2(m_diceParser->humanReadableError().isEmpty(), "no error"); + QVERIFY2(m_diceParser->humanReadableWarning().isEmpty(), "no warning"); + } + + auto resultCmd= m_diceParser->scalarResultsFromEachInstruction(); + + auto resultCommand= resultCmd.at(0); + + switch(theOperator) + { + case Dice::CompareOperator::GreaterThan: + QVERIFY(results < resultCommand); + break; + case Dice::CompareOperator::LesserThan: + QVERIFY(results > resultCommand); + break; + case Dice::CompareOperator::LesserOrEqual: + qDebug() << results << " " << resultCommand; + QVERIFY(results >= resultCommand); + break; + default: + break; + } +} + +void TestDice::listValueWithOption_data() +{ + QTest::addColumn("command"); + QTest::addColumn("results"); + QTest::addColumn("theOperator"); + QTest::addColumn("error"); + + // explode + QTest::addRow("cmd1") << "[10]e10" << 10 << Dice::CompareOperator::GreaterThan << false; + QTest::addRow("cmd2") << "[10]e10" << std::numeric_limits::max() << Dice::CompareOperator::LesserThan << false; + // add + QTest::addRow("cmd3") << "[10]a10" << 10 << Dice::CompareOperator::GreaterThan << false; + QTest::addRow("cmd4") << "[10]a10" << 20 << Dice::CompareOperator::LesserOrEqual << false; + // reroll + QTest::addRow("cmd3") << "[10]r10" << 0 << Dice::CompareOperator::GreaterThan << false; + QTest::addRow("cmd4") << "[10]r10" << 11 << Dice::CompareOperator::LesserOrEqual << false; + // reroll until + QTest::addRow("cmd5") << "[10]R10" << 10 << Dice::CompareOperator::LesserOrEqual << false; + QTest::addRow("cmd6") << "[10]R1" << 10 << Dice::CompareOperator::LesserOrEqual << false; +} + void TestDice::cleanupTestCase() {} QTEST_MAIN(TestDice) -- cgit v1.2.3-70-g09d2