From a22754c83ad06f4c8bb6e3cba33c18bd3a9a92b9 Mon Sep 17 00:00:00 2001 From: DualFroz Date: Mon, 14 Sep 2026 02:50:10 +0200 Subject: [PATCH] test: strengthen tests for run --- tests/run.lua | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) diff --git a/tests/run.lua b/tests/run.lua index 7af4285..88a5c92 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -15093,6 +15093,179 @@ local order = { "gameGraveEntryCapturesDepthGoldEssenceAndClassAtTheMomentOfDeath", "gameGraveEntryDefaultsToWandererForAClasslessRun", "builderNeverPlacesAGraveWhenOptionsCarriesNone", + "buildersOnlyRollAGraveOntoAFloorAtOrShallowerThanWhereItWasDug", + "buildersOccasionallyPlaceAnEligibleGraveFromSuppliedOptions", + "buildersInsertAGraveWithoutDisturbingAnyOtherPlacement", + "metaGravesFieldDefaultsToEmptyAndSurvivesASaveLoadRoundTrip", + "proficiencyKeyForReadsFistsWhenUnarmedAndTheWeaponsNameOnceEquipped", + "proficiencyOnMeleeHitAccumulatesAndReturnsOnlyOnARankCrossing", + "proficiencyAttackBonusReadsTheHighestRankCrossedForTheCurrentKeyAlone", + "entityEffectiveAttackFoldsInProficiencyAlongsideMomentumAndSanity", + "gamePlayerAttackAccumulatesProficiencyAndLogsOnlyOnARankCrossing", + "renderPanelShowsMasteryOnlyOnceARankIsCrossed", + "proficiencyFieldSurvivesSerialization", + "proficiencyOnHitWithAndBonusForTrackAnExplicitKeyIndependentOfKeyFor", + "gameFireAtAccumulatesBowSpecificProficiencySeparateFromMelee", + "ascensionCatalogEntriesHaveUniqueKeysAndAtLeastOneEffectHook", + "ascensionIsUnlockedRequiresMeetingBothDepthAndWinRequirements", + "ascensionIsUnlockedWithNoMetaLocksEveryCatalogedMutator", + "ascensionResolveDropsUnknownAndStillLockedKeys", + "ascensionResolveDeduplicatesAndReordersToCatalogOrder", + "ascensionResolveWithNoRequestReturnsEmpty", + "ascensionIsActiveTrueOnlyForKeysInTheActiveList", + "ascensionDamageMultiplierMultipliesAcrossActiveMutators", + "ascensionEssenceMultiplierAppliesFamineAlone", + "ascensionSightPenaltySumsAcrossActiveMutators", + "ascensionRenownBonusPercentSumsRatherThanCompounds", + "ascensionApplyToPlayerHalvesMaxHpAndDoublesAttackForGlassCannon", + "ascensionApplyToPlayerHalvesDefenseForFrail", + "gameNewResolvesRequestedMutatorsAgainstMetaAndAppliesTheirDeltas", + "gameMonsterMeleeDamageStacksBloodboundWithBloodmoonMultiplicatively", + "gameKillEssenceStacksFamineWithRichVeinsMultiplicatively", + "gameEffectiveRadiusStacksNightblindWithHush", + "metaRenownForAddsTheAscensionBonusOnTopOfTheBaseScore", + "ascensionFieldSurvivesASaveLoadRoundTrip", + "renderPanelShowsActiveAscensionMutatorsByKey", + "durabilityFreshWeaponStartsAtMaxAndIsNotBroken", + "durabilityWearWeaponDecrementsAndBreaksAtZeroSubtractingItsPower", + "durabilityWearWeaponIsANoOpOnceAlreadyBroken", + "durabilityWearArmorBreaksAndSubtractsItsPowerFromDefense", + "durabilityWearBowBreaksWithoutTouchingAnyStatDirectly", + "durabilityEffectivePowerIsZeroForABrokenItemAndFullOtherwise", + "durabilityRepairFailsWithoutEnoughGoldOrOnAPristineItem", + "durabilityRepairRestoresFullDurabilityAndFoldsPowerBackInAfterABreak", + "durabilityRepairOnANotYetBrokenItemJustTopsUpDurabilityWithoutTouchingStats", + "equipWeaponAddsOnlyEffectivePowerForAnAlreadyBrokenWeapon", + "rangedFireDealsNoBowBonusOnceTheBowIsBroken", + "gamePlayerAttackWearsTheEquippedWeaponAndLogsWhenItBreaks", + "gameMonsterMeleeWearsThePlayersArmorAndLogsWhenItBreaks", + "gameFireAtWearsTheEquippedBowAndLogsWhenItBreaks", + "gameBrokenEquippedSlotFindsTheFirstBrokenPieceInPriorityOrder", + "gameRepairEquippedSpendsGoldAndLogsSuccess", + "gameRepairEquippedFailsAndLogsWhenGoldIsShort", + "autopilotRepairsBrokenGearAutomaticallyWhenAffordable", + "durabilityFieldsSurviveSerialization", + "renderPanelShowsWornGearOnlyOnceItHasTakenDamage", + "disarmSweepDetectsAHiddenTrapWithinOneStepEventuallyAcrossAHandfulOfSeeds", + "disarmSweepNeverDetectsATrapTwoStepsAway", + "disarmSweepNeverRedetectsAnAlreadyDetectedOrRevealedTrap", + "disarmOddsForClimbWithLevelButNeverReachTheDenominator", + "disarmAttemptOnSuccessRemovesTheTrapAndPaysSalvage", + "disarmAttemptOnFailureSpringsTheTrapOnThePlayer", + "gameDisarmTrapRefusesAnUndetectedOrAlreadySprungTrap", + "gameDisarmTrapSucceedsOrSpringsExactlyLikeDisarmAttempt", + "gameEndPlayerTurnEventuallyDetectsAnAdjacentTrapAcrossAHandfulOfSeeds", + "trapDetectedFieldSurvivesSerialization", + "secretsSweepDiscoversAnAdjacentHiddenDoorEventuallyAcrossAHandfulOfSeeds", + "secretsSweepNeverDiscoversADoorTwoStepsAway", + "secretsSweepNeverRediscoversAnAlreadyDiscoveredDoor", + "secretsSweepOpensTheWallIntoAPlainClosedDoorOnDiscovery", + "builderOccasionallyPlacesASecretDoorGuardingAGenuinelyUnreachableAlcove", + "builderNeverPlacesASecretDoorAboveDepthTwo", + "gameEndPlayerTurnEventuallyDiscoversAnAdjacentSecretDoorAcrossAHandfulOfSeeds", + "secretDoorFieldsSurviveSerialization", + "chestsNewLootAlwaysIncludesGoldAndExactlyOneGearPiece", + "chestsNewNeverRollsTrappedOnAnUnlockedChest", + "chestsIsLockedIsTrueForALockedUnopenedChestAndFalseOnceOpened", + "chestsOpenGrantsEveryLootItemAndEmptiesTheChest", + "chestsOpenRefusesAnAlreadyEmptiedChest", + "chestsOpenRefusesALockedChestAndLeavesItsLootUntouched", + "chestsUnlockWithKeySpendsExactlyOneKeyAndGrantsTheHoard", + "chestsUnlockWithKeyFailsWithoutAKeyAndLeavesTheChestLocked", + "chestsUnlockWithKeyRefusesAChestThatIsNotLocked", + "chestsPickFailsImmediatelyWithoutALockpickAndSpendsNothing", + "chestsPickOnSuccessOpensTheChestAndGrantsTheHoard", + "chestsPickAlwaysSpendsTheLockpickWhetherItWinsOrLoses", + "chestsPickOnFailureAgainstATrappedChestSpringsItAndLeavesTheLockStanding", + "chestsPickOnFailureAgainstAnUntrappedChestJustWastesThePick", + "chestsOddsForClimbsWithLevelButNeverReachesTheDenominator", + "gameOpenChestOpensAnUnlockedChestOnSightAndCountsIt", + "gameOpenChestUnlocksWithACarriedKeyBeforeEverTryingALockpick", + "gameOpenChestFallsBackToALockpickWhenNoKeyIsCarried", + "gameOpenChestRefusesWhenNothingIsHereOrItIsAlreadyEmpty", + "chestsFieldsSurviveSerialization", + "renderShowsAClosedChestGlyphAndAnOpenedOneOnceEmptied", + "autopilotOpensAnUnlockedChestOnSightButSkipsALockedOneWithNoKeyOrPick", + "mercenaryHireTakesOnAKnownRosterEntryAdjacentToThePlayer", "mercenaryHireRejectsAnUnknownRosterKey", + "mercenaryHireReplacesAnEarlierHireling", "mercenaryAttacksAdjacentHostileMonsterAndCanKillIt", + "mercenaryAdvancesOnAVisibleMonsterItCannotYetReach", "mercenaryIgnoresAMonsterBeyondItsSightRadius", + "mercenaryActBlindedHirelingOnlyDetectsAnAdjacentHostileNotOneWithinItsSightRadius", + "mercenaryActAttackingAnAdjacentMonsterEmitsNoiseThatCanStirADormantBystander", + "mercenaryFollowsThePlayerWhenNoMonsterIsVisible", + "mercenaryActConfusedHirelingSometimesStumblesInsteadOfFightingAnAdjacentHostile", + "fieldMedicMendsThePlayerWhenIdle", + "mercenaryStopsChasingAndFollowingOnceSulking", "mercenaryStillFightsAnAdjacentHostileEvenWhileSulking", + "mercenaryPayWagePaysWhenAffordableAndRestoresLoyalty", "mercenaryPayWageShortsAndDropsLoyaltyWhenGoldIsShort", + "mercenaryPayWageDesertsOnceLoyaltyBottomsOut", "mercenaryPayWageIsANoOpWithNoHirelingOnTheLevel", + "mercenaryDismissReleasesTheHirelingWithNoPenalty", "mercenaryDismissFailsWithNoOneUnderContract", + "useItemOnAContractHiresTheNamedMercenaryAndConsumesIt", + "useItemOnAContractWithAnUnknownRosterKeyFailsWithoutConsumingIt", + "takeMonsterTurnRoutesAHirelingThroughMercenariesAct", "aFallenHirelingIsLoggedAndSweptWithoutAwardingXp", + "gameEndPlayerTurnPaysTheHirelingWageOnceTheIntervalElapses", "mercenaryFieldsSurviveSerialization", + "shopPriceOfAContractMatchesItsRosterHireCost", "shopStockCanRollAContractWithAPositiveCatalogPrice", + "autopilotHiresACarriedContractWhenNoHirelingIsYetUnderContract", + "morgueScoreWeighsEveryStatByItsOwnFixedWeight", "morgueScoreAddsTheWinBonusOnlyWhenWon", + "morgueEquipmentListsOnlyOccupiedSlotsInFixedOrder", "morgueEquipmentPrefixesARevealedCurseButNotAHiddenOne", + "morgueKillTallySortsByCountThenByCatalogOrderOnTies", "morgueBuildMirrorsGameStatsPlayerAndCompendium", + "morgueFormatRendersOutcomeGearKillsAndScoreInOrder", "morgueFormatNamesTheWinOutcomeWhenWon", + "morgueFormatOmitsEquipmentAndKillsSectionsWhenEmpty", + "leaderboardRecordOnAnEmptyBoardLandsAtRankOne", "leaderboardRecordKeepsTheBoardSortedBestScoreFirst", + "leaderboardRecordDropsAnEntryThatDoesNotCrackTheCap", "leaderboardRecordBumpsTheWeakestEntryOffOnceFull", + "leaderboardTopReturnsAtMostCountEntriesInOrder", "leaderboardTopDefaultsToTheFullCapacityWhenNoCountIsGiven", + "leaderboardBestScoreReadsTheTopEntryOrZeroWhenEmpty", + "metaLeaderboardFieldDefaultsToEmptyAndSurvivesASaveLoadRoundTrip", + "replayRunIsDeterministicAndMatchesAFreshGamesOwnReport", "replayVerifyConfirmsAGenuineReportAndReturnsItsScore", + "replayVerifyFlagsATamperedReportAndStillReturnsTheRealScore", + "replayComparedFieldsCoversEveryFieldMorgueScoreActuallyReads", + "replayMatchesReportsTheFirstDivergingFieldInComparedFieldsOrder", + "challengesForDaySameDayAlwaysReturnsTheSamePresetAndSeed", "challengesForDayCyclesThroughTheCatalogInOrder", + "challengesSeedForStaysWithinTheDefaultSeedRange", "challengesCatalogPresetsReferenceOnlyRealClassesAndMutators", + "challengesDescribeNamesTheClassAndEveryRequiredMutator", "challengesDescribeOmitsTheMutatorJoinWhenNoneAreRequired", + "challengesSatisfiedByFailsOnAClassMismatch", "challengesSatisfiedBySucceedsWithTheRightClassAndNoMutatorsRequired", + "challengesSatisfiedByFailsWhenARequiredMutatorNeverActivated", + "challengesSatisfiedBySucceedsOnceItsRequiredMutatorIsActuallyActive", + "analyticsWinRateIsZeroWithNoRecordedRunsAndFractionalOtherwise", + "analyticsAverageScoreIsZeroOnAnEmptyBoardAndTheMeanOtherwise", + "analyticsFavoriteClassPicksTheMostFrequentTiesBrokenByFirstAppearance", + "analyticsPercentileRanksAScoreAgainstTheBoardItWouldJoin", + "titlesForRenownNeverReturnsNilForAnyNonNegativeRenown", + "titlesForRenownWalksTheLadderFromTheBottomUp", "titlesToNextCountsDownToTheNextThresholdAndNilsOutAtTheTop", + "morgueBuildOmitsTitleWithoutMetaAndIncludesItWithMeta", + "exportLeaderboardCsvOnAnEmptyBoardIsJustTheHeaderRow", "exportLeaderboardCsvEmitsOneRowPerEntryInRankOrder", + "exportLeaderboardCsvRendersBooleansAsLowercaseWords", "exportCompendiumCsvListsEverySpeciesSeenOrNot", + "streaksCurrentIsZeroAndNilOnAnEmptyHistory", "streaksCurrentCountsOnlyTheUnbrokenRunAtTheEnd", + "streaksRecordTrimsHistoryPastItsCap", "streaksRecordDropsTheOldestEntryNotTheNewestOnceOverCap", + "streaksBestWinStreakFindsTheLongestWinRunAnywhereNotJustTheActiveOne", + "streaksBestWinStreakIsZeroWithNoWinsAtAll", "metaRecordRunFeedsStreaksAndRunHistorySurvivesASaveLoadRoundTrip", + "metaRecordRunUnlocksComebackOnlyAfterALossThenAWin", + "metaRecordRunDoesNotUnlockComebackOnAFirstEverWinOrAWinAfterAWin", + "nemesisIsEligibleRequiresAHuntingHostileAndExcludesEverySpecialCase", + "nemesisPickHunterReturnsTheNearestEligibleHunterBreakingTiesByListOrder", + "nemesisBeginFromCapturesSpeciesAndHpFractionAtGrudgeOne", + "nemesisEscalateRaisesGrudgeAndHealsTowardFullBothCapped", + "nemesisSpawnScalesHpAndAttackWithGrudgeAndAppliesTheCarriedHpFraction", + "nemesisNameForEscalatesThroughEachEpithetAndClampsAtTheLast", + "nemesisXpBonusAndBountyGoldScaleWithGrudge", + "gameDescendCanRollANewNemesisFromAHuntingMonsterLeftOnTheDepartingFloor", + "gameDescendNeverRollsANewNemesisFromAMonsterThatIsNotActuallyHunting", + "gameNemesisFollowsAcrossMultipleDescentsEscalatingItsGrudgeEachTime", + "gameAscendCarriesAnActiveNemesisAlongButNeverRollsANewOne", + "gameDescendCarriesEveryLivingAllyOntoTheNextFloorInsteadOfAbandoningThem", + "gameAscendCarriesEveryLivingAllyBackOntoThePreviousFloorToo", + "gameAwardKillOnANemesisGrantsBonusXpAndBountyGoldAndClearsTheHunt", + "nemesisFieldsSurviveEntityAndGameSerialization", + "factionsAreRivalsChecksBothDirectionsAndExcludesSameFactionAndNil", + "infightingTargetPicksTheNearestVisibleRivalOverACloserNonRival", + "infightingTargetIgnoresARivalBeyondSightRange", + "infightingTargetIgnoresARivalBehindAWallEvenWithinSightRange", + "infightingTargetIgnoresNonRivalsWithoutDiscord", + "infightingTargetUnderDiscordPicksNearestCreatureOfAnyKindIncludingACompanion", + "infightingTargetReturnsNilOnceDiscordHasExpired", + "infightingStrikeOnAPlainMonsterSpawnsACorpseButAwardsThePlayerNothing", + "infightingStrikeThatKillsACompanionRoutesThroughTheNormalAllyDeathMessage", + "infightingStrikeEmitsNoiseThatCanStirADormantBystanderNotInvolvedInTheFight", + "infightingStrikeAppliesTheAttackersEliteLifestealAgainstAnyDefenderNotJustThePlayer", + "infightingStrikeAppliesTheAttackersEliteOnHitRiderAgainstAnyDefenderNotJustThePlayer", } for _, name in ipairs(order) do