def test_allocate_mixed_keys(self):
        fixed_masks = [None, None, 0xFFFFFF00, 0xFFFFF800]
        n_keys = [200, 20, 20, 256]

        allocator = MallocBasedRoutingInfoAllocator()

        allocator._allocate_fixed_keys_and_masks(
            [BaseKeyAndMask(0x800, 0xFFFFF800)], None)

        print(allocator._free_space_tracker)

        for mask, keys in zip(fixed_masks, n_keys):
            self._print_keys_and_masks(
                allocator._allocate_keys_and_masks(mask, None, keys))
            print(allocator._free_space_tracker)

        print(allocator._free_space_tracker)

        error = ("Allocation has not resulted in the expected free space"
                 " being available")
        self.assertEqual(len(allocator._free_space_tracker), 3, error)
        self.assertEqual(allocator._free_space_tracker[0].start_address,
                         0x120, error)
        self.assertEqual(allocator._free_space_tracker[0].size,
                         224, error)
        self.assertEqual(allocator._free_space_tracker[1].start_address,
                         0x300, error)
        self.assertEqual(allocator._free_space_tracker[1].size,
                         1280, error)
        self.assertEqual(allocator._free_space_tracker[2].start_address,
                         0x1800, error)
        self.assertEqual(allocator._free_space_tracker[2].size,
                         0x100000000 - 0x1800, error)
    def test_allocate_mixed_keys(self):
        fixed_masks = [None, None, 0xFFFFFF00, 0xFFFFF800]
        n_keys = [200, 20, 20, 256]

        allocator = MallocBasedRoutingInfoAllocator()

        allocator._allocate_fixed_keys_and_masks(
            [BaseKeyAndMask(0x800, 0xFFFFF800)], None)

        print(allocator._free_space_tracker)

        for mask, keys in zip(fixed_masks, n_keys):
            self._print_keys_and_masks(
                allocator._allocate_keys_and_masks(mask, None, keys))
            print(allocator._free_space_tracker)

        print(allocator._free_space_tracker)

        error = ("Allocation has not resulted in the expected free space"
                 " being available")
        self.assertEqual(len(allocator._free_space_tracker), 3, error)
        self.assertEqual(allocator._free_space_tracker[0].start_address, 0x120,
                         error)
        self.assertEqual(allocator._free_space_tracker[0].size, 224, error)
        self.assertEqual(allocator._free_space_tracker[1].start_address, 0x300,
                         error)
        self.assertEqual(allocator._free_space_tracker[1].size, 1280, error)
        self.assertEqual(allocator._free_space_tracker[2].start_address,
                         0x1800, error)
        self.assertEqual(allocator._free_space_tracker[2].size,
                         0x100000000 - 0x1800, error)
 def test_allocate_n_keys(self):
     allocator = MallocBasedRoutingInfoAllocator()
     self._print_keys_and_masks(allocator._allocate_keys_and_masks(
         None, None, 20))
     error = ("Allocation has not resulted in the expected free space"
              " being available")
     print(allocator._free_space_tracker)
     self.assertEqual(len(allocator._free_space_tracker), 1, error)
     self.assertEqual(allocator._free_space_tracker[0].start_address, 32,
                      error)
     self.assertEqual(allocator._free_space_tracker[0].size,
                      0x100000000 - 32, error)
 def test_allocate_n_keys(self):
     allocator = MallocBasedRoutingInfoAllocator()
     self._print_keys_and_masks(
         allocator._allocate_keys_and_masks(None, None, 20))
     error = ("Allocation has not resulted in the expected free space"
              " being available")
     print(allocator._free_space_tracker)
     self.assertEqual(len(allocator._free_space_tracker), 1, error)
     self.assertEqual(allocator._free_space_tracker[0].start_address, 32,
                      error)
     self.assertEqual(allocator._free_space_tracker[0].size,
                      0x100000000 - 32, error)
    def test_allocate_fixed_mask(self):
        allocator = MallocBasedRoutingInfoAllocator()

        try:
            self._print_keys_and_masks(allocator._allocate_keys_and_masks(
                                       0xFFFFFF00, None, 20, True))
        except:
            traceback.print_exc()
            self.fail("Unexpected exception is raised when allocating a key!")

        error = ("Allocation has not resulted in the expected free space"
                 " being available")
        print allocator._free_space_tracker
        self.assertEqual(len(allocator._free_space_tracker), 1, error)
        self.assertEqual(allocator._free_space_tracker[0].start_address, 0x100,
                         error)
        self.assertEqual(allocator._free_space_tracker[0].size, 0xFFFFFF00,
                         error)