def test_update(): o = OrderedSet() o.add(1) o.add(2) o.add(3) o.update([3, 4, 5]) for item in (5, 4, 3, 2, 1): assert o.pop() == item with pytest.raises(KeyError): o.pop()
def test_pop(): o = OrderedSet() o.add(12) o.add(78) o.add(56) o.add(34) o.add(90) for item in [90, 34, 56, 78, 12]: assert o.pop() == item with pytest.raises(KeyError): # @UndefinedVariable o.pop()
def test_peek(): o = OrderedSet() o.add(1) o.add(2) o.add(3) p1 = o.peek() p2 = o.pop() assert p1 == 3 assert p1 == p2 p3 = o.peek(last=False) assert p3 == 1 p4 = o.pop(last=False) assert p4 == p3
class CoreTracker(object): """ Represents the number of cores and sdram left to allocate """ __slots__ = [ # The number of cores available after preallocation "_n_cores", # cores available including ones needed for preallocation "_cores", # keep list of counts of the cores per n_cores_available "_cores_counter", ] def __init__(self, chip, preallocated_resources, cores_counter): """ :param ~spinn_machine.Chip chip: chip whose resources can be allocated :param preallocated_resources: :type preallocated_resources: PreAllocatedResourceContainer or None """ self._cores = OrderedSet() for processor in chip.processors: if not processor.is_monitor: self._cores.add(processor.processor_id) self._n_cores = len(self._cores) if preallocated_resources: if chip.ip_address: self._n_cores -= preallocated_resources.cores_ethernet else: self._n_cores -= preallocated_resources.cores_all if chip.virtual: self._cores_counter = None else: self._cores_counter = cores_counter if self._cores_counter: self._cores_counter[self._n_cores] += 1 @property def n_cores_available(self): return self._n_cores def is_core_available(self, p): if p is None: return self.is_available else: return p in self._cores def available_core(self): return self._cores.peek() @property def is_available(self): return self._n_cores > 0 def allocate(self, p): if p is None: p = self._cores.pop() else: self._cores.remove(p) if self._cores_counter: self._cores_counter[self._n_cores] -= 1 self._n_cores -= 1 if self._cores_counter: self._cores_counter[self._n_cores] += 1 if self._n_cores <= 0: self._cores = OrderedSet() return p def deallocate(self, p): self._cores.add(p) if self._cores_counter: self._cores_counter[self._n_cores] -= 1 self._n_cores += 1 if self._cores_counter: self._cores_counter[self._n_cores] += 1