def test_two_group_with_id_of_advertiser(self): """ среди участников (объект класса Сreative) есть 2 разных id_of_advertiser get_maximums вернет список из 2х списков первый будет содержать 2 элемента с максимальной ценой в своей группе второй список содержит только один максимум три победителя нельзя найти в этом списке участников - это пустой список два победителя имеют в сумме цену, равную сумме цен максимумов групп """ creatives = [ Creative(0, 10, 0), Creative(1, 12, 1), Creative(2, 24, 0, "GB"), Creative(3, 9, 1, "FR"), Creative(4, 10, 0) ] max_of_groups = get_maximums(creatives, "FR") self.assertEqual(len(max_of_groups), len(set(i.id_of_advertiser for i in creatives if i.country == "FR" or not i.country)), 'correct len of group list') self.assertListEqual([i.id for i in max_of_groups[0]], [0, 4], 'equal id elements in first') self.assertListEqual([i.id for i in max_of_groups[1]], [1], 'equal id elements in first') winners = auction(creatives, 2, "FR") self.assertEqual(sum([i.price for i in winners]), sum([i[0].price for i in max_of_groups]), 'equal id elements') # тоже самое для другой страны max_of_groups = get_maximums(creatives, "GB") self.assertEqual(len(max_of_groups), len(set(i.id_of_advertiser for i in creatives if i.country == "GB" or not i.country)), 'correct len of group list') self.assertListEqual([i.id for i in max_of_groups[0]], [2], 'equal id elements in first') self.assertListEqual([i.id for i in max_of_groups[1]], [1], 'equal id elements in first') winners = auction(creatives, 2, "GB") self.assertEqual(sum([i.price for i in winners]), sum([i[0].price for i in max_of_groups]), 'equal id elements')
def test_auction(self): max_of_groups = get_maximums(self.creatives) max_of_groups.sort(key=lambda x: -x[0].price) winners = auction(self.creatives, self.count) # этот тест пройдет так как # группы победителей определяются однозначно self.assertEqual(sum([i.price for i in winners]), sum([i[0].price for i in max_of_groups[:self.count]]), 'equal price')
def test_get_winners_from_bigger_groups(self): """ :return: """ max_of_groups = get_maximums(self.creatives) max_of_groups.sort(key=lambda x: -x[0].price) bigger_groups = [max_of_groups[0]] winners = get_winners_from_price_equal_groups_step_by_step(bigger_groups, 1) self.assertEqual(sum([i.price for i in winners]), bigger_groups[0][0].price, 'equal price')
def test_get_maximums(self): """ get_maximums вернет список из одного списка внутренний список состоит из двух участников """ max_of_groups = get_maximums(self.creatives) self.assertEqual(len(max_of_groups), len(set(i.id_of_advertiser for i in self.creatives)), 'correct len of group list') self.assertListEqual([i.id for i in max_of_groups[0]], [0, 2], 'equal id elements')
def test_one_group_with_id_of_advertiser(self): """ если третий аргумент "FR", возможных победителей 2: с айди 1 и 2 если третий аргумент "GB", возможных победителей 2: с айди 0 и 4 """ creatives = [ Creative(0, 10, 0, "GB"), Creative(1, 5, 0, "FR"), Creative(2, 5, 0), Creative(3, 7, 0, "GB"), Creative(4, 10, 0, "GB") ] max_of_groups = get_maximums(creatives, "FR") self.assertEqual(len(max_of_groups), len(set(i.id_of_advertiser for i in creatives if i.country == "FR" or not i.country)), 'correct len of group list') self.assertListEqual([i.id for i in max_of_groups[0]], [1, 2], 'equal id elements') winners = auction(creatives, 1, "FR") self.assertEqual(sum([i.price for i in winners]), max_of_groups[0][0].price, 'equal price') # тоже самое на другой стране max_of_groups = get_maximums(creatives, "GB") self.assertEqual(len(max_of_groups), len(set(i.id_of_advertiser for i in creatives if i.country == "GB" or not i.country)), 'correct len of group list') self.assertListEqual([i.id for i in max_of_groups[0]], [0, 4], 'equal id elements') winners = auction(creatives, 1, "GB") self.assertEqual(sum([i.price for i in winners]), max_of_groups[0][0].price, 'equal price')
def test_auction(self): """ один победитель из участников будет иметь максимальную цену из цен участников ноль победителей - это пустой список """ max_of_groups = get_maximums(self.creatives) winners = auction(self.creatives, 1) self.assertEqual(sum([i.price for i in winners]), max_of_groups[0][0].price, 'equal price') empty_winners = auction(self.creatives, 0) self.assertListEqual([i.id for i in empty_winners], [], 'equal id elements')
def test_auction(self): max_of_groups = get_maximums(self.creatives) max_of_groups.sort(key=lambda x: -x[0].price) winners = auction(self.creatives, 1) self.assertEqual(sum([i.price for i in winners]), max_of_groups[0][0].price, 'equal price')