def test_add_table_SHOULD_replace_values_for_common_elements(self): # ARRANGE # name_of_common_symbol = 'the symbol 1 name' value1 = ASymbolTableValue('the symbol 1 value') value2 = ASymbolTableValue('the symbol 2 value') table1 = sut.SymbolTable({name_of_common_symbol: value1}) table2 = sut.SymbolTable({name_of_common_symbol: value2}) # ACT # table1.add_table(table2) # ASSERT # _assert_table_contains(self, table1, NameAndValue(name_of_common_symbol, value2)) self.assertEqual(1, len(table1.names_set))
def test_add_table__empty_intersection(self): # ARRANGE # symbol_1 = NameAndValue('the symbol 1 name', ASymbolTableValue('the symbol 1 value')) symbol_2 = NameAndValue('the symbol 2 name', ASymbolTableValue('the symbol 2 value')) table1 = sut.SymbolTable({symbol_1.name: symbol_1.value}) table2 = sut.SymbolTable({symbol_2.name: symbol_2.value}) # ACT # table1.add_table(table2) # ASSERT # _assert_table_contains(self, table1, symbol_1) _assert_table_contains(self, table1, symbol_2) self.assertEqual(2, len(table1.names_set))
def test_construction_from_dict(self): # ARRANGE # symbol = NameAndValue('the symbol name', ASymbolTableValue('the symbol value')) # ACT # actual = sut.SymbolTable({symbol.name: symbol.value}) # ASSERT # _assert_table_contains_single_value(self, actual, symbol)
def test_lookup_SHOULD_give_the_corresponding_value_WHEN_the_table_contains_the_given_key(self): # ARRANGE # symbol = NameAndValue('the symbol name', ASymbolTableValue('the symbol value')) table = sut.SymbolTable({symbol.name: symbol.value}) # ACT # actual = table.lookup(symbol.name) # ASSERT # self.assertIs(symbol.value, actual)
def test_put_SHOULD_replace_value_WHEN_key_already_is_in_table(self): # ARRANGE # symbol_name = 'the symbol name' symbol_value_1 = ASymbolTableValue('the symbol 1 value') symbol_value_2 = ASymbolTableValue('the symbol 2 value') table = sut.SymbolTable({symbol_name: symbol_value_1}) # ACT # table.put(symbol_name, symbol_value_2) # ASSERT # _assert_table_contains_single_value(self, table, NameAndValue(symbol_name, symbol_value_2))
def test_WHEN_updating_a_copy_THEN_the_original_SHOULD_not_loose_elements(self): # ARRANGE # symbol_in_original = NameAndValue('the original symbol name', ASymbolTableValue('the original symbol value')) symbol_in_copy = NameAndValue('the copy symbol name', ASymbolTableValue('the copy symbol value')) original_table = sut.SymbolTable({symbol_in_original.name: symbol_in_original.value}) # ACT # copied_table = original_table.copy() copied_table.put(symbol_in_copy.name, symbol_in_copy.value) # ASSERT # _assert_table_contains(self, copied_table, symbol_in_original) _assert_table_contains(self, copied_table, symbol_in_copy) self.assertEqual(2, len(copied_table.names_set), 'the copy SHOULD contain the original symbol and the symbol added to the copy_') _assert_table_contains_single_value(self, original_table, symbol_in_original)
def _table_from_nav(elements: Sequence[NameAndValue[ASymbolTableValue]]) -> sut.SymbolTable: return sut.SymbolTable({ e.name: e.value for e in elements })