def test_alloc_boards_compensate_for_dead(self):
        # When over-allocating, extra boards in the allocation should
        # compensate for dead boards.
        a = Allocator(4, 2, dead_boards=set([(0, 0, 2)]))
        assert a._alloc_boards_possible(24, max_dead_boards=0) is False
        assert a._alloc_boards(24, max_dead_boards=0) is None

        assert a._alloc_boards_possible(23, max_dead_boards=0) is True
        assert len(a._alloc_boards(23, max_dead_boards=0)[1]) == 23
 def test_alloc_triads_empty(self):
     # Should fail if nothing or negative amounts requested
     a = Allocator(3, 4)
     assert a._alloc_triads(0, 1) is None
     assert a._alloc_triads(-1, 1) is None
     assert a._alloc_triads(1, -1) is None
     assert a._alloc_triads(1, 0) is None
     assert a._alloc_boards(0) is None
     assert a._alloc_boards(-1) is None
 def test_alloc_boards_round_up(self):
     # Should round up number of boards being allocated to a multiple of
     # three
     a = Allocator(3, 4)
     assert len(a._alloc_boards(1)[1]) == 3
     assert len(a._alloc_boards(2)[1]) == 3
     assert len(a._alloc_boards(3)[1]) == 3
     assert len(a._alloc_boards(4)[1]) == 6
     assert len(a._alloc_boards(5)[1]) == 6
     assert len(a._alloc_boards(6)[1]) == 6
 def test_alloc_triads_bad_torus(self):
     # Should not be able to allocate a torus unless requesting the full
     # machine
     a = Allocator(3, 4)
     assert a._alloc_triads(1, 2, require_torus=True) is None
     assert a._alloc_triads(3, 2, require_torus=True) is None
     assert a._alloc_triads(2, 4, require_torus=True) is None
     assert a._alloc_boards(1*2*3, require_torus=True) is None
     assert a._alloc_boards(3*2*3, require_torus=True) is None
     assert a._alloc_boards(2*4*3, require_torus=True) is None
 def test_alloc_triads_too_big(self):
     # Should fail if something too big is requested
     a = Allocator(3, 4)
     assert a._alloc_triads(4, 4) is None
     assert a._alloc_triads(3, 5) is None
     assert a._alloc_triads(4, 5) is None
     assert a._alloc_boards(3*4*3 + 1) is None
 def test_alloc_triads_dead_links(self):
     # Should not be able to allocate if too many links are dead
     a = Allocator(3, 4, dead_links=set([(0, 0, 0, Links.north)]))
     assert a._alloc_triads(3, 4, max_dead_links=0) is None
     assert a._alloc_boards(3*4*3, max_dead_links=0) is None