Example #1
0
 def test_trim_and_replace(self):
     ''' test the trim and replace utility '''
     cake = CollectionResource(['c'])
     trim = CollectionResource(['a', 'b'])
     user = CollectionPreference('mark', {'a': 1, 'b': 5, 'c': 10})
     piece = trim_and_replace(user, cake, trim, 1)
     self.assertEqual(cake, CollectionResource(['c', 'b']))
Example #2
0
 def test_resource_create(self):
     ''' test that the resource factory methods work '''
     cake1 = CollectionResource.random(5)
     cake2 = CollectionResource.random(5)
     cake3 = CollectionResource.random()
     self.assertEqual(cake1.actual_value(), cake2.actual_value())
     self.assertNotEqual(cake1.value, cake2.value)
     self.assertNotEqual(cake1.value, cake3.value)
Example #3
0
 def test_resource_as_collection(self):
     ''' test that we can convert a resource to a collection '''
     keys = ['red', 'blue', 'green']
     cake = CollectionResource(keys)
     pieces = cake.as_collection()
     actual = [CollectionResource(key) for key in keys]
     for this,that in zip(pieces, actual):
         self.assertEqual(this.value, that.value)
Example #4
0
 def test_create_equal_pieces(self):
     ''' test the create equal pieces utility '''
     pref = {'a': 1, 'b': 1, 'c': 1}
     cake = CollectionResource(pref.keys())
     user = CollectionPreference('mark', pref)
     actual = create_equal_pieces(user, cake, 3)
     pieces = [CollectionResource([k]) for k in pref.keys()]
     self.assertEqual(actual, pieces)
Example #5
0
    def test_choose_best_piece(self):
        ''' test the choose best piece utility '''
        prefs = {'a': 1, 'b': 2, 'c': 3}
        cakes = [CollectionResource([k]) for k in prefs.keys()]
        user = CollectionPreference('mark', prefs)
        actual = choose_best_piece(user, cakes)
        self.assertEqual(actual.value, ['c'])

        user.values['b'] = 3
        cakes = [CollectionResource([k]) for k in prefs.keys()]
        actual = choose_best_piece(user, cakes)
        self.assertEqual(actual.value, ['c'])
Example #6
0
    def test_preference_create(self):
        ''' test that the preference is created correctly '''
        vals  = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
        keys  = sorted(vals.keys())
        cake  = CollectionResource(keys)
        user1 = CollectionPreference('mark', vals)
        user2 = OrdinalPreference('john', keys)
        self.assertEqual(user1.value_of(cake), user2.value_of(cake))

        random.seed(1) # to ensure same test
        cake  = CollectionResource(['a'])
        user3 = OrdinalPreference.random(cake)
        self.assertNotEqual(user2.value_of(cake), user3.value_of(cake))
Example #7
0
 def test_resource_create_pieces(self):
     ''' test that we can create n pieces of the cake '''
     keys = ['red', 'blue', 'green', 'yellow', 'orange', 'purple']
     vals = dict((k, F(1,1)) for k in keys)
     cake = CollectionResource(keys)
     user = CollectionPreference('mark', vals)
     pieces = create_equal_pieces(user, cake, 3)
     actual = [
         CollectionResource(['red', 'blue']),
         CollectionResource(['green', 'yellow']),
         CollectionResource(['orange', 'purple'])
     ]
     for this,that in zip(pieces, actual):
         self.assertEqual(this.value, that.value)
    def test_division(self):
        ''' test that the algorithm divides correctly '''
        vals = {'red': 10, 'blue': 20, 'green': 30}
        keys = vals.keys()
        cake = CollectionResource(keys)
        users = []
        users.append(
            CollectionPreference('mark', {
                'red': 10,
                'blue': 20,
                'green': 30
            }))
        users.append(
            CollectionPreference('john', {
                'red': 10,
                'blue': 30,
                'green': 20
            }))
        users.append(
            CollectionPreference('anna', {
                'red': 30,
                'blue': 20,
                'green': 10
            }))

        algorithm = SealedBidsAuction(users, cake)
        divisions = algorithm.divide()
        for user, pieces in divisions.items():
            self.assertEqual(30, get_total_value(user, pieces))
Example #9
0
 def test_choose_last_piece(self):
     ''' test the choose last piece utility '''
     a, b, c = V('a', 10), V('b', 100), V('c', 1000)
     cake = CollectionResource([a, b, c])
     users = [
         CollectionPreference('mark', {
             a: 0.50,
             b: 0.50
         }),
         CollectionPreference('john', {
             a: 0.25,
             b: 0.75
         })
     ]
     user, piece = choose_last_piece(users, cake)
     self.assertEqual(user, users[1])
     self.assertEqual(piece, CollectionResource([a]))
Example #10
0
 def test_choose_lowest_bidder(self):
     ''' test the choose lowest bidder utility '''
     cake = CollectionResource(['cake'])
     users = [
         CollectionPreference('mark', {'cake': 1}),
         CollectionPreference('john', {'cake': 0})
     ]
     actual = choose_lowest_bidder(users, cake)
     self.assertEqual(actual, users[1])
    def test_initializes(self):
        ''' test that the algorithm initializes correctly '''
        keys = ['red', 'blue', 'green', 'yello', 'orange']
        vals = dict((k, 100 / len(keys)) for k in keys)
        cake = CollectionResource(keys)
        users = []
        users.append(CollectionPreference('mark', vals))
        users.append(CollectionPreference('john', vals))

        algorithm = SealedBidsAuction(users, cake)
        self.assertEqual(True, algorithm.is_valid())
Example #12
0
    def test_inverse_division(self):
        ''' test that the inverse algorithm divides correctly '''
        vals = {'red': 10, 'blue': 20, 'green': 30, 'yello': 15, 'orange': 25}
        keys = vals.keys()
        cake = CollectionResource(keys)
        users = []
        users.append(CollectionPreference('mark', vals))
        users.append(CollectionPreference('john', vals))

        algorithm = InverseDivideAndChoose(users, cake)
        divisions = algorithm.divide()
        for user, piece in divisions.items():
            self.assertEqual(50, user.value_of(piece))
Example #13
0
    def test_list_worst_pieces(self):
        ''' test the list worst pieces utility '''
        cakes = [CollectionResource(['a']), CollectionResource(['b'])]
        users = [
            CollectionPreference('mark', {
                'a': 1,
                'b': 0
            }),
            CollectionPreference('john', {
                'a': 0,
                'b': 1
            })
        ]
        actual = list_worst_pieces(users, cakes)
        expect = {users[0]: cakes[1], users[1]: cakes[0]}
        self.assertEqual(actual, expect)

        users[0].values = {'a': 1, 'b': 0}
        users[1].values = {'a': 1, 'b': 0}
        actual = list_worst_pieces(users, cakes)
        expect = {users[0]: cakes[1], users[1]: cakes[1]}
        self.assertEqual(actual, expect)
Example #14
0
 def test_resource_remove(self):
     ''' test that the resource remove works correctly '''
     keys = ['red', 'blue', 'green', 'yellow', 'orange']
     cake = CollectionResource(keys)
     item = CollectionResource(keys[2:])
     cake.remove(item)
     actual = CollectionResource(keys[:2])
     self.assertEqual(actual, cake)
Example #15
0
 def test_resource_append(self):
     ''' test that the resource append works correctly '''
     keys = ['red', 'blue', 'green', 'yellow', 'orange']
     cake = CollectionResource(keys[:-2])
     item = CollectionResource(keys[-2:])
     cake.append(item)
     actual = CollectionResource(keys)
     self.assertEqual(actual.value, cake.value)
Example #16
0
    def test_initializes(self):
        ''' test that the algorithm initializes correctly '''
        keys = ['red', 'blue', 'green', 'yello', 'orange']
        vals = dict((k, 100 / len(keys)) for k in keys)
        cake = CollectionResource(keys)
        users = []
        users.append(CollectionPreference('mark', vals))
        users.append(CollectionPreference('john', vals))

        algorithm = DivideAndChoose(users, cake)
        self.assertEqual(True, algorithm.is_valid())

        algorithm.users.append(CollectionPreference('bill', vals))
        self.assertRaises(ValueError, lambda: algorithm.is_valid())
Example #17
0
    def test_sort_by_value(self):
        ''' test the sort by value utility '''
        keys = ['a', 'b', 'c']
        prefs = {'a': 1, 'b': 2, 'c': 3}
        cakes = [CollectionResource([k]) for k in keys]
        user = CollectionPreference('mark', prefs)

        expected = [(3, cakes[2]), (2, cakes[1]), (1, cakes[0])]
        actual = sort_by_value(user, cakes, reverse=True)
        self.assertEqual(actual, expected)

        expected = [(1, cakes[0]), (2, cakes[1]), (3, cakes[2])]
        actual = sort_by_value(user, cakes)
        self.assertEqual(actual, expected)
Example #18
0
    def test_preference_create(self):
        ''' test that the preference factory methods work '''
        path  = os.path.join(os.path.abspath('contrib'), 'data')
        path  = os.path.join(path, 'collection')
        path  = os.path.join(path, 'uniform')
        user1 = CollectionPreference.from_file(path)
        keys  = user1.values.keys()
        prefs = dict((p, 0.25) for p in keys)
        user2 = CollectionPreference('user2', prefs)
        cake  = CollectionResource(keys)
        self.assertEqual(user1.value_of(cake), user2.value_of(cake))

        users = [CollectionPreference.random(cake) for i in range(5)]
        for user in users:
            self.assertTrue(0.95 <= user.value_of(cake) <= 1.05)
Example #19
0
    def test_resource_clone(self):
        ''' test that the resource clone works correctly '''
        keys = ['red', 'blue', 'green', 'yellow', 'orange']
        vals = dict((k, F(1,1)) for k in keys)
        cake = CollectionResource(keys)
        user = CollectionPreference('mark', vals)
        copy = cake.clone()
        self.assertEqual(str(cake), str(copy))
        self.assertEqual(repr(cake), repr(copy))

        self.assertEqual(5, cake.actual_value(),)
        self.assertEqual(cake.actual_value(), copy.actual_value())

        self.assertEqual(CollectionResource('a'), CollectionResource(['a']))
Example #20
0
    def test_resource_find_pieces(self):
        ''' test that we can find a piece in the cake '''
        keys = ['red', 'blue', 'green', 'yellow', 'orange', 'purple']
        vals = dict((k, F(1,1)) for k in keys)
        cake = CollectionResource(keys)
        user = CollectionPreference('mark', vals)
        piece = cake.find_piece(user, 3)
        actual = CollectionResource(['red', 'blue', 'green'])
        self.assertEqual(piece.value, actual.value)

        vals = {'red':10, 'blue':20, 'green':30, 'yellow':15, 'orange':25}
        keys = vals.keys()
        cake = CollectionResource(keys)
        user = CollectionPreference('mark', vals)
        self.assertEqual(50, user.value_of(cake.find_piece(user, 50)))
        self.assertEqual(60, user.value_of(cake.find_piece(user, 60)))
        self.assertEqual(70, user.value_of(cake.find_piece(user, 70)))

        vals = {'red':10, 'blue':20, 'green':30, 'orange':40}
        keys = vals.keys()
        cake = CollectionResource(keys)
        user = CollectionPreference('mark', vals)
        self.assertEqual(50, user.value_of(cake.find_piece(user, 50)))
        self.assertEqual(60, user.value_of(cake.find_piece(user, 60)))
        self.assertEqual(70, user.value_of(cake.find_piece(user, 70)))

        self.assertRaises(ValueError, lambda: cake.find_piece(user, 150))