Files
old-krovovi-kalkulator/test/calculators/subarray_graph_test.py
2017-11-07 09:23:57 +01:00

79 lines
3.5 KiB
Python

import copy
from time import clock
import unittest
from nose.tools import eq_
from helix.calculators.subarray_graph import SubarrayGraph
from test.fixtures.sample_arrays import *
from helix.constants.system_type import SystemType
class SubarrayGraphTest(unittest.TestCase):
def test_find_disconnected_subgraphs(self):
copy_dumbell_no_wind_anchors = copy.deepcopy(dumbell_no_wind_anchors)
graph = SubarrayGraph(copy_dumbell_no_wind_anchors, SystemType.singleTilt)
graph.pop_rung()
subgraphs = graph.find_disconnected_subgraphs()
eq_(len(subgraphs), 2)
eq_(len(subgraphs[0]), 4)
eq_(len(subgraphs[1]), 4)
def test_find_disconnected_subgraphs_more_complicated(self):
copy_odd_shape_no_wind_anchors = copy.deepcopy(odd_shape_no_wind_anchors)
graph = SubarrayGraph(copy_odd_shape_no_wind_anchors, SystemType.singleTilt)
graph.pop_rung()
subgraphs = graph.find_disconnected_subgraphs()
eq_(len(subgraphs), 3)
eq_(len(subgraphs[0]), 4)
eq_(len(subgraphs[1]), 8)
eq_(len(subgraphs[2]), 1)
def test_find_node(self):
copy_odd_shape_no_wind_anchors = copy.deepcopy(odd_shape_no_wind_anchors)
graph = SubarrayGraph(copy_odd_shape_no_wind_anchors, SystemType.singleTilt)
eq_(graph.find_node(Coordinate(-1, -1)), None)
lower_left_node = self.naive_find_node(graph, Coordinate(0, 0))
eq_(graph.find_node(Coordinate(0, 0)), lower_left_node)
middle_ish_node = self.naive_find_node(graph, Coordinate(2, 7))
eq_(graph.find_node(Coordinate(2, 7)), middle_ish_node)
# def test_find_node_performance(self):
# copy_odd_shape_no_wind_anchors = copy.deepcopy(odd_shape_no_wind_anchors)
# graph = SubarrayGraph(copy_odd_shape_no_wind_anchors, SystemType.singleTilt)
#
# iteration_count = 100
#
# invalid_base = self.check_performance(lambda: self.naive_find_node(graph, Coordinate(-1, -1)), iteration_count)
# lower_left_base = self.check_performance(lambda: self.naive_find_node(graph, Coordinate(0, 0)), iteration_count)
# middle_ish_base = self.check_performance(lambda: self.naive_find_node(graph, Coordinate(2, 7)), iteration_count)
#
# invalid_test = self.check_performance(lambda: graph.find_node(Coordinate(-1, -1)), iteration_count)
# lower_left_test = self.check_performance(lambda: graph.find_node(Coordinate(0, 0)), iteration_count)
# middle_ish_test = self.check_performance(lambda: graph.find_node(Coordinate(2, 7)), iteration_count)
#
# print("Invalid coordinate: %f base, %f actual" % (invalid_base, invalid_test))
# print("0, 0 coordinate: %f base, %f actual" % (lower_left_base, lower_left_test))
# print("2, 7 coordinate: %f base, %f actual" % (middle_ish_base, middle_ish_test))
#
# assert invalid_test < (invalid_base / 10), "Expected invalid coordinate to almost no-op, didn't"
# assert lower_left_test < lower_left_base, "Expected 0, 0 coordinate to be better than naive approach"
# assert middle_ish_base < middle_ish_test, "Expected 2, 7 coordinate to be better than naive approach"
def naive_find_node(self, graph, coordinate):
for node in graph.nodes:
if node.location == coordinate:
return node
def check_performance(self, function, iterations):
start = clock()
for _ in range(iterations):
function()
end = clock()
return (end - start) / iterations