Skip to content

Commit

Permalink
Implement repeat iterator
Browse files Browse the repository at this point in the history
  • Loading branch information
LucaTomasko committed Feb 1, 2024
1 parent 627175b commit 7082a50
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
28 changes: 28 additions & 0 deletions scaaml/capture/input_generators/attack_point_iterator.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ def _build_attack_points_iterator(configuration: Dict) -> AttackPointIterator:
"constants": AttackPointIteratorConstants,
"balanced_generator": AttackPointIteratorBalancedGenerator,
"unrestricted_generator": AttackPointIteratorUnrestrictedGenerator,
"repeat": AttackPointIteratorRepeat,
}
operation = configuration["operation"]
iterator_cls = supported_operations.get(operation)
Expand Down Expand Up @@ -152,3 +153,30 @@ def __iter__(self):

def get_generated_keys(self) -> List[str]:
return [self._name]


class AttackPointIteratorRepeat(AttackPointIterator):
"""
Attack point iterator class that iterates
over a configuration a repeated amount of times.
"""

def __init__(self, operation: str, repetitions: int,
configuration: Dict) -> None:
"""Initialize the repeated iterate."""
assert "repeat" == operation
self._repetitions = repetitions
self._configuration_iterator = build_attack_points_iterator(
configuration)
self._len = repetitions * len(self._configuration_iterator)

def __len__(self) -> int:
return self._len

def __iter__(self):
return iter(
list(iter(self._configuration_iterator))
for repetitions in range(self._repetitions))

def get_generated_keys(self) -> List[str]:
return self._configuration_iterator.get_generated_keys()
41 changes: 41 additions & 0 deletions tests/capture/input_generators/test_attack_point_iterator.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,44 @@ def test_attack_point_iterator_unrestricted_generator_all_args_len():
output = list(iter(build_attack_points_iterator(config)))
assert len(output) == config["bunches"] * config["elements"]
assert len(output) == len(build_attack_points_iterator(config))


def test_attack_point_iterator_repeat():
config = {
"operation": "repeat",
"repetitions": 2,
"configuration": {
"operation": "constants",
"name": "key",
"values": [1, 2, 3]
}
}
output = list(iter(build_attack_points_iterator(config)))
assert output == [[{
'key': 1
}, {
'key': 2
}, {
'key': 3
}], [{
'key': 1
}, {
'key': 2
}, {
'key': 3
}]]


def test_attack_point_iterator_repeat_len():
config = {
"operation": "repeat",
"repetitions": 2,
"configuration": {
"operation": "constants",
"name": "key",
"values": [1, 2, 3]
}
}
output = len(build_attack_points_iterator(config))
assert output == config["repetitions"] * len(
config["configuration"]["values"])

0 comments on commit 7082a50

Please sign in to comment.