Exemplo n.º 1
0
    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')
Exemplo n.º 2
0
 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')
Exemplo n.º 3
0
 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')
Exemplo n.º 4
0
    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')
Exemplo n.º 5
0
    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')
Exemplo n.º 6
0
    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')
Exemplo n.º 7
0
 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')