def count_health_in_node_value(valueItems, firstIndex, lastIndex): startIndexForCount = binary_search( valueItems, lambda value, i: is_insert_index(DataItem(firstIndex, 0), valueItems, i)) endIndexForCount = binary_search( valueItems, lambda value, i: is_insert_index( DataItem(lastIndex, 0), valueItems, i, insert_after=True)) - 1 if startIndexForCount == -1 or endIndexForCount == -1: return 0 value_to_substract = 0 if startIndexForCount == 0 else valueItems[ startIndexForCount - 1].sum total_sum = valueItems[-1].sum if endIndexForCount == - \ 2 else valueItems[endIndexForCount].sum return total_sum - value_to_substract
def add_health_to_gene_trie(gene_trie, health, index): if gene_trie.value == None: gene_trie.value = [DataItem(index, health)] return items = gene_trie.value insert_index = binary_search( items, lambda value, i: is_insert_index(DataItem(index, 0), items, i)) insert_item = None if insert_index == -1: insert_item = DataItem(index, health + items[-1].sum) items.append(insert_item) return previous_sum = 0 if insert_index == 0 else items[insert_index - 1].sum insert_item = DataItem(index, health + previous_sum) items.insert(insert_index, insert_item) for i in range(insert_index + 1, len(items)): items[i].sum += health
def test_should_return_minus_one_when_no_found(): assert binary_search(fakeSmall, lambda a, _: 6 - a) == -1
def test_inserting_strict_index_and_insert_at_start(): assert binary_search( fakeSmallOdd, lambda item, index: is_insert_index( 1, fakeSmallOdd, index, insert_after=True)) == 1
def test_find_best_index_to_insert_insert_at_start_with_equal_and_four_items(): assert binary_search( fakeSmall, lambda item, index: is_insert_index(1, fakeSmall, index)) == 0
def test_find_best_index_to_insert_at_the_end_should_be_minus_one(): assert binary_search( fakeTwo, lambda item, index: is_insert_index(20, fakeTwo, index)) == -1
def test_find_best_index_to_insert_should_be_0(): assert binary_search( fakeTwo, lambda item, index: is_insert_index(3, fakeTwo, index)) == 0
def test_find_best_index_to_insert(): assert binary_search( fakeTwo, lambda item, index: is_insert_index(7, fakeTwo, index)) == 1
def test_should_return_empty(): assert binary_search([], lambda a, _: 11 - a) == -1
def test_when_only_one_should_return_minus_one_up(): assert binary_search(fakeOne, lambda a, _: 12 - a) == -1
def test_when_only_one_should_return_0(): assert binary_search(fakeOne, lambda a, _: 11 - a) == 0
def test_should_return_item_11(): assert binary_search(fakeTwo, lambda a, _: 11 - a) == 1
def test_should_return_the_of_item_in_the_middle(): assert binary_search(fakeSmallOdd, lambda a, _: 5 - a) == 1
def test_should_return_the_index_of_the_found_item(): assert binary_search(fakeSmall, lambda a, _: 11 - a) == 2
def test_should_no_found_lower(): assert binary_search(fakeSmall, lambda a, _: 0 - a) == -1