9b527a044f
+ Added CI + Restructured Project + Improved API Improved creation speed by factor of \~2 + Improved execution speed by factor of \~15 - Removed multi processor since it doesn't work with the new setup and was not fast enough to matter.
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""
|
|
Copyright 2019 Richard Feistenauer
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
"""
|
|
|
|
# pylint: disable=missing-function-docstring
|
|
# pylint: disable=missing-class-docstring
|
|
# pylint: disable=redefined-outer-name
|
|
# pylint: disable=unused-argument
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
import sys
|
|
import pytest
|
|
from .context import cellular_automaton as ca
|
|
|
|
|
|
def import_mock(module):
|
|
def argument_wrapper(func):
|
|
def function_wrapper(automaton, *args, **kwargs):
|
|
try:
|
|
module_ = sys.modules[module]
|
|
except KeyError:
|
|
module_ = ""
|
|
sys.modules[module] = MagicMock()
|
|
return_value = func(automaton, pygame_mock=sys.modules[module], *args, **kwargs)
|
|
|
|
if module_ != "":
|
|
sys.modules[module] = module_
|
|
else:
|
|
del sys.modules[module]
|
|
return return_value
|
|
|
|
return function_wrapper
|
|
|
|
return argument_wrapper
|
|
|
|
|
|
class TAutomaton(ca.CellularAutomaton):
|
|
def init_cell_state(self, cell_coordinate):
|
|
return [1] if cell_coordinate == (1, 1) else [0]
|
|
|
|
def evolve_rule(self, last_cell_state, neighbors_last_states):
|
|
return [last_cell_state[0] + 1] if neighbors_last_states else last_cell_state
|
|
|
|
|
|
@pytest.fixture
|
|
def automaton():
|
|
return TAutomaton(ca.MooreNeighborhood(), (3, 3))
|
|
|
|
|
|
@import_mock(module='pygame')
|
|
def test_evolution_steps_per_draw(automaton, pygame_mock):
|
|
ca.CAWindow(cellular_automaton=automaton, window_size=(10, 10)).run(evolutions_per_draw=10, last_evolution_step=1)
|
|
assert automaton.evolution_step == 10
|
|
|
|
|
|
@import_mock(module='pygame')
|
|
def test_updated_rectangle_calls(automaton, pygame_mock):
|
|
ca.CAWindow(cellular_automaton=automaton, window_size=(10, 10)).run(last_evolution_step=4)
|
|
assert pygame_mock.display.update.call_count == 4 * (3 + 1) # steps * (texts + changed cells)
|