def test_convert_surge__on_rolled_dice_pool(): rolled_dice_pool = dce.RolledDicePool.from_rolled_dice_list( [ dse.RolledDouse( douse=att_dse.BlackAttackDouse(), symbol=sym.Surge(), ), dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=sym.Hit(), ), dse.RolledDouse( douse=att_dse.WhiteAttackDouse(), symbol=sym.Crit(), ), ] ) rolled_dice_pool_target = dce.RolledDicePool.from_rolled_dice_list( [ dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=sym.Hit(), ), dse.RolledDouse( douse=att_dse.BlackAttackDouse(), symbol=sym.Crit(), ), dse.RolledDouse( douse=att_dse.WhiteAttackDouse(), symbol=sym.Crit(), ), ] ) assert actions.convert_all_surges_to_crit.on(rolled_dice_pool) == rolled_dice_pool_target
def test_roll__rolled_dice_pool__aim__red_dice(symbols_before, symbols_after, prob): rolled_dice_pool = dce.RolledDicePool.from_rolled_dice_list([ dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=symbol, ) for symbol in symbols_before ]) rerolled_dice_pool = dce.RolledDicePool.from_rolled_dice_list([ dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=symbol, ) for symbol in symbols_after ]) aim = rll.Roll( roll_policy=rll_pol.RollPolicyAttack(), roll_limit=2, ) reroll_prob_dist_dict = aim.copy().on(rolled_dice_pool).as_dict assert reroll_prob_dist_dict[rerolled_dice_pool] == prob
sym.Crit(), ]))) def test_convert_symbols__conversion_order__symbols(n_converts, symbols, symbols_target): conversion = conv_syms.ConvertSymbols( conversion_policy=conv_pol.ConversionPolicyAttackAnyToCrit(), conversion_limit=n_converts, ) assert conversion.on(syms.Symbols.from_symbols_list( symbols)) == syms.Symbols.from_symbols_list(symbols_target) @pytest.mark.parametrize( "conversion_policy, n_converts, rolled_dice, rolled_dice_target", ( (conv_pol.ConversionPolicyAttackAnyToCrit(), 2, [ dse.RolledDouse(att_dse.RedAttackDouse(), sym.Blank()), dse.RolledDouse(att_dse.BlackAttackDouse(), sym.Surge()), dse.RolledDouse(att_dse.WhiteAttackDouse(), sym.Hit()), ], [ dse.RolledDouse(att_dse.RedAttackDouse(), sym.Crit()), dse.RolledDouse(att_dse.BlackAttackDouse(), sym.Crit()), dse.RolledDouse(att_dse.WhiteAttackDouse(), sym.Hit()), ]), (conv_pol.ConversionPolicyAttackAnyToCrit(), 1, [ dse.RolledDouse(att_dse.RedAttackDouse(), sym.Blank()), dse.RolledDouse(att_dse.BlackAttackDouse(), sym.Surge()), dse.RolledDouse(att_dse.WhiteAttackDouse(), sym.Hit()), ], [ dse.RolledDouse(att_dse.RedAttackDouse(), sym.Crit()), dse.RolledDouse(att_dse.BlackAttackDouse(), sym.Surge()), dse.RolledDouse(att_dse.WhiteAttackDouse(), sym.Hit()),
def test_convert_surge__on_rolled_douse__surge(): rolled_douse = dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=sym.Surge(), ) assert actions.convert_all_surges_to_crit.on(rolled_douse).symbol == sym.Crit()
def test_convert_surge__on_dice_pool(): dice_pool = dce.DicePool.from_dice_list( [ att_dse.WhiteAttackDouse(), att_dse.RedAttackDouse(), att_dse.BlackAttackDouse(), ] ) result_all_surge = dce.RolledDicePool.from_rolled_dice_list( [ dse.RolledDouse( douse=att_dse.WhiteAttackDouse(), symbol=sym.Surge() ), dse.RolledDouse( douse=att_dse.BlackAttackDouse(), symbol=sym.Surge() ), dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=sym.Surge() ), ] ) assert dice_pool.get_probability_distribution().as_dict[result_all_surge] == fractions.Fraction( numerator=1, denominator=8 ** 3, ), "No conversion sanity check." result_all_hit = dce.RolledDicePool.from_rolled_dice_list( [ dse.RolledDouse( douse=att_dse.WhiteAttackDouse(), symbol=sym.Hit() ), dse.RolledDouse( douse=att_dse.BlackAttackDouse(), symbol=sym.Hit() ), dse.RolledDouse( douse=att_dse.RedAttackDouse(), symbol=sym.Hit() ), ] ) assert dice_pool.get_probability_distribution().as_dict[result_all_hit] == fractions.Fraction( numerator=1 * 3 * 5, denominator=8 ** 3, ), "No conversion sanity check." dice_pool_converted_to_hit_prob_dist = actions.convert_all_surges_to_hit.on(dice_pool) assert dice_pool_converted_to_hit_prob_dist.as_dict[result_all_surge] == 0 assert dice_pool_converted_to_hit_prob_dist.as_dict[result_all_hit] == fractions.Fraction( numerator=2 * 4 * 6, denominator=8 ** 3, ) dice_pool_converted_to_hit_prob_dist = actions.convert_all_surges_to_crit.on(dice_pool) assert dice_pool_converted_to_hit_prob_dist.as_dict[result_all_surge] == 0 assert dice_pool_converted_to_hit_prob_dist.as_dict[result_all_hit] == fractions.Fraction( numerator=1 * 3 * 5, denominator=8 ** 3, )
rll_pol.RollPolicyAttack(), att_dse.WhiteAttackDouse, sym.Blank(), att_dse.WhiteAttackDouse().get_probability_distribution(), ), ( rll_pol.RollPolicyAttack(), att_dse.BlackAttackDouse, sym.Surge(), att_dse.BlackAttackDouse().get_probability_distribution(), ), ( rll_pol.RollPolicyAttackBlanksOnly(), att_dse.RedAttackDouse, sym.Surge(), dse.RolledDouse(att_dse.RedAttackDouse(), sym.Surge()).get_probability_distribution(), ), ( rll_pol.RollPolicyAttackCritFish(), att_dse.RedAttackDouse, sym.Hit(), att_dse.RedAttackDouse().get_probability_distribution(), ), )) def test_roll__rolled_douse(policy, douse_cls, symbol, target_prob_dist): rolled_douse = dse.RolledDouse( douse=douse_cls(), symbol=symbol, ) assert rll.Roll(roll_policy=policy, ).on(rolled_douse) == target_prob_dist