mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-04-08 02:58:14 -07:00
- The Shane and Sebastian Portrait filler items werent tagged properly. - The Beach Farm adds one secretsanity check, so it needs to be in the allsanity preset - The Allsanity preset is renamed to "Maxsanity" to encourage better defined terminology and Allsanity means something else - The "All Random" preset has been removed entirely. It has been the cause of too many beginner footguns over the years. People can still achieve the effect manually, but at least they'll have to try a little bit to ruin their own experience.
110 lines
5.2 KiB
Python
110 lines
5.2 KiB
Python
from .bases import SVTestBase
|
|
from .. import options, item_table, Group
|
|
|
|
max_iterations = 4000
|
|
|
|
|
|
# Success Rate: (1 - ((1 - (1 / 199)) ^ 4000)) ^ 199 -> 0.99999964737880935363435882766624 -> 99.999965%
|
|
class TestItemLinksEverythingIncluded(SVTestBase):
|
|
options = {options.ExcludeGingerIsland.internal_name: options.ExcludeGingerIsland.option_false,
|
|
options.TrapDifficulty.internal_name: options.TrapDifficulty.option_medium,
|
|
options.AllowedFillerItems.internal_name: options.AllowedFillerItems.preset_all,
|
|
}
|
|
|
|
def test_filler_of_all_types_generated(self):
|
|
max_number_filler = 197
|
|
filler_generated = []
|
|
at_least_one_trap = False
|
|
at_least_one_island = False
|
|
for i in range(0, max_iterations):
|
|
filler = self.multiworld.worlds[1].get_filler_item_name()
|
|
if filler in filler_generated:
|
|
continue
|
|
filler_generated.append(filler)
|
|
self.assertNotIn(Group.MAXIMUM_ONE, item_table[filler].groups)
|
|
self.assertNotIn(Group.AT_LEAST_TWO, item_table[filler].groups)
|
|
if Group.TRAP in item_table[filler].groups:
|
|
at_least_one_trap = True
|
|
if Group.GINGER_ISLAND in item_table[filler].groups:
|
|
at_least_one_island = True
|
|
if len(filler_generated) >= max_number_filler:
|
|
break
|
|
self.assertTrue(at_least_one_trap)
|
|
self.assertTrue(at_least_one_island)
|
|
self.assertGreaterEqual(len(filler_generated), max_number_filler)
|
|
|
|
|
|
class TestItemLinksNoIsland(SVTestBase):
|
|
options = {options.ExcludeGingerIsland.internal_name: options.ExcludeGingerIsland.option_true,
|
|
options.TrapDifficulty.internal_name: options.TrapDifficulty.option_medium,
|
|
options.AllowedFillerItems.internal_name: options.AllowedFillerItems.preset_all,
|
|
}
|
|
|
|
def test_filler_has_no_island_but_has_traps(self):
|
|
max_number_filler = 190
|
|
filler_generated = []
|
|
at_least_one_trap = False
|
|
for i in range(0, max_iterations):
|
|
filler = self.multiworld.worlds[1].get_filler_item_name()
|
|
if filler in filler_generated:
|
|
continue
|
|
filler_generated.append(filler)
|
|
self.assertNotIn(Group.GINGER_ISLAND, item_table[filler].groups)
|
|
self.assertNotIn(Group.MAXIMUM_ONE, item_table[filler].groups)
|
|
self.assertNotIn(Group.AT_LEAST_TWO, item_table[filler].groups)
|
|
if Group.TRAP in item_table[filler].groups:
|
|
at_least_one_trap = True
|
|
if len(filler_generated) >= max_number_filler:
|
|
break
|
|
self.assertTrue(at_least_one_trap)
|
|
self.assertGreaterEqual(len(filler_generated), max_number_filler)
|
|
|
|
|
|
class TestItemLinksNoTraps(SVTestBase):
|
|
options = {options.ExcludeGingerIsland.internal_name: options.ExcludeGingerIsland.option_false,
|
|
options.TrapDifficulty.internal_name: options.TrapDifficulty.option_no_traps,
|
|
options.AllowedFillerItems.internal_name: options.AllowedFillerItems.preset_all,
|
|
}
|
|
|
|
def test_filler_has_no_traps_but_has_island(self):
|
|
max_number_filler = 174
|
|
filler_generated = []
|
|
at_least_one_island = False
|
|
for i in range(0, max_iterations):
|
|
filler = self.multiworld.worlds[1].get_filler_item_name()
|
|
if filler in filler_generated:
|
|
continue
|
|
filler_generated.append(filler)
|
|
self.assertNotIn(Group.TRAP, item_table[filler].groups)
|
|
self.assertNotIn(Group.MAXIMUM_ONE, item_table[filler].groups)
|
|
self.assertNotIn(Group.AT_LEAST_TWO, item_table[filler].groups)
|
|
if Group.GINGER_ISLAND in item_table[filler].groups:
|
|
at_least_one_island = True
|
|
if len(filler_generated) >= max_number_filler:
|
|
break
|
|
self.assertTrue(at_least_one_island)
|
|
self.assertGreaterEqual(len(filler_generated), max_number_filler)
|
|
|
|
|
|
class TestItemLinksNoTrapsAndIsland(SVTestBase):
|
|
options = {options.ExcludeGingerIsland.internal_name: options.ExcludeGingerIsland.option_true,
|
|
options.TrapDifficulty.internal_name: options.TrapDifficulty.option_no_traps,
|
|
options.AllowedFillerItems.internal_name: options.AllowedFillerItems.preset_all,
|
|
}
|
|
|
|
def test_filler_generated_without_island_or_traps(self):
|
|
max_number_filler = 167
|
|
filler_generated = []
|
|
for i in range(0, max_iterations):
|
|
filler = self.multiworld.worlds[1].get_filler_item_name()
|
|
if filler in filler_generated:
|
|
continue
|
|
filler_generated.append(filler)
|
|
self.assertNotIn(Group.GINGER_ISLAND, item_table[filler].groups)
|
|
self.assertNotIn(Group.TRAP, item_table[filler].groups)
|
|
self.assertNotIn(Group.MAXIMUM_ONE, item_table[filler].groups)
|
|
self.assertNotIn(Group.AT_LEAST_TWO, item_table[filler].groups)
|
|
if len(filler_generated) >= max_number_filler:
|
|
break
|
|
self.assertGreaterEqual(len(filler_generated), max_number_filler)
|