diff --git a/lib/mod_list_troubleshooter.dart b/lib/mod_list_troubleshooter.dart index c260c33..69b29e8 100644 --- a/lib/mod_list_troubleshooter.dart +++ b/lib/mod_list_troubleshooter.dart @@ -34,6 +34,14 @@ class ModListTroubleshooter { } ModList binaryBackward() { + final midIndex = ((_startIndex + _endIndex) / 2).ceil(); + final subset = originalModList.activeMods.keys.toList().sublist( + 0, + midIndex, + ); + currentModList.disableAll(); + currentModList.enableMods(subset); + _endIndex = midIndex; return currentModList; } diff --git a/test/mod_list_troubleshooter_test.dart b/test/mod_list_troubleshooter_test.dart index 9c58f07..001fc0c 100644 --- a/test/mod_list_troubleshooter_test.dart +++ b/test/mod_list_troubleshooter_test.dart @@ -97,5 +97,28 @@ void main() { expect(result.activeMods.length, equals(1)); }, ); + test( + 'Bisect search should end up with half the mods every backward iteration until 1', + () { + final troubleshooter = ModListTroubleshooter(modList); + + var result = troubleshooter.binaryBackward(); + // Half of our initial 30 + expect(result.activeMods.length, equals(15)); + + result = troubleshooter.binaryBackward(); + // Half of our previous result + expect(result.activeMods.length, equals(8)); + + result = troubleshooter.binaryBackward(); + expect(result.activeMods.length, equals(4)); + + result = troubleshooter.binaryBackward(); + expect(result.activeMods.length, equals(2)); + + result = troubleshooter.binaryBackward(); + expect(result.activeMods.length, equals(1)); + }, + ); }); }