diff --git a/lib/mod_list_troubleshooter.dart b/lib/mod_list_troubleshooter.dart index 69b29e8..d21b53c 100644 --- a/lib/mod_list_troubleshooter.dart +++ b/lib/mod_list_troubleshooter.dart @@ -26,7 +26,10 @@ class ModListTroubleshooter { ModList binaryForward() { final midIndex = (_startIndex + _endIndex) ~/ 2; - final subset = originalModList.activeMods.keys.toList().sublist(midIndex); + final subset = originalModList.activeMods.keys.toList().sublist( + midIndex, + _endIndex, + ); currentModList.disableAll(); currentModList.enableMods(subset); _startIndex = midIndex; @@ -36,7 +39,7 @@ class ModListTroubleshooter { ModList binaryBackward() { final midIndex = ((_startIndex + _endIndex) / 2).ceil(); final subset = originalModList.activeMods.keys.toList().sublist( - 0, + _startIndex, midIndex, ); currentModList.disableAll(); diff --git a/test/mod_list_troubleshooter_test.dart b/test/mod_list_troubleshooter_test.dart index 001fc0c..fbef505 100644 --- a/test/mod_list_troubleshooter_test.dart +++ b/test/mod_list_troubleshooter_test.dart @@ -116,6 +116,29 @@ void main() { result = troubleshooter.binaryBackward(); expect(result.activeMods.length, equals(2)); + result = troubleshooter.binaryBackward(); + expect(result.activeMods.length, equals(1)); + }, + ); + test( + 'Bisect search should end up with half the mods every iteration until 1', + () { + final troubleshooter = ModListTroubleshooter(modList); + + var result = troubleshooter.binaryBackward(); + // Half of our initial 30 + expect(result.activeMods.length, equals(15)); + + result = troubleshooter.binaryForward(); + // Half of our previous result + expect(result.activeMods.length, equals(8)); + + result = troubleshooter.binaryBackward(); + expect(result.activeMods.length, equals(4)); + + result = troubleshooter.binaryForward(); + expect(result.activeMods.length, equals(2)); + result = troubleshooter.binaryBackward(); expect(result.activeMods.length, equals(1)); },