Cura/tests/TestHitChecker.py
2024-01-04 06:30:23 +03:00

141 lines
5.8 KiB
Python

from unittest.mock import patch
from cura.HitChecker import HitChecker
from cura.OneAtATimeIterator import OneAtATimeIterator
from cura.Scene.CuraSceneNode import CuraSceneNode
def test_anyTwoNodesBlockEachOther_True():
node1 = CuraSceneNode(no_setting_override=True)
node2 = CuraSceneNode(no_setting_override=True)
# node1 and node2 block each other
hit_map = {
node1: {node1: 0, node2: 1},
node2: {node1: 1, node2: 0}
}
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
hit_checker = HitChecker([node1, node2])
assert hit_checker.anyTwoNodesBlockEachOther([node1, node2])
assert hit_checker.anyTwoNodesBlockEachOther([node2, node1])
def test_anyTwoNodesBlockEachOther_False():
node1 = CuraSceneNode(no_setting_override=True)
node2 = CuraSceneNode(no_setting_override=True)
# node1 blocks node2, but node2 doesn't block node1
hit_map = {
node1: {node1: 0, node2: 1},
node2: {node1: 0, node2: 0}
}
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
hit_checker = HitChecker([node1, node2])
assert not hit_checker.anyTwoNodesBlockEachOther([node1, node2])
assert not hit_checker.anyTwoNodesBlockEachOther([node2, node1])
def test_canPrintBefore():
node1 = CuraSceneNode(no_setting_override=True)
node2 = CuraSceneNode(no_setting_override=True)
node3 = CuraSceneNode(no_setting_override=True)
# nodes can be printed only in order node1 -> node2 -> node3
hit_map = {
node1: {node1: 0, node2: 0, node3: 0},
node2: {node1: 1, node2: 0, node3: 0},
node3: {node1: 1, node2: 1, node3: 0},
}
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
hit_checker = HitChecker([node1, node2, node3])
assert hit_checker.canPrintBefore(node1, [node2])
assert hit_checker.canPrintBefore(node1, [node3])
assert hit_checker.canPrintBefore(node1, [node2, node3])
assert hit_checker.canPrintBefore(node1, [node3, node2])
assert hit_checker.canPrintBefore(node2, [node3])
assert not hit_checker.canPrintBefore(node2, [node1])
assert not hit_checker.canPrintBefore(node2, [node1, node3])
assert not hit_checker.canPrintBefore(node2, [node3, node1])
assert not hit_checker.canPrintBefore(node3, [node1])
assert not hit_checker.canPrintBefore(node3, [node2])
assert not hit_checker.canPrintBefore(node3, [node1, node2])
assert not hit_checker.canPrintBefore(node3, [node2, node1])
def test_canPrintAfter():
node1 = CuraSceneNode(no_setting_override=True)
node2 = CuraSceneNode(no_setting_override=True)
node3 = CuraSceneNode(no_setting_override=True)
# nodes can be printed only in order node1 -> node2 -> node3
hit_map = {
node1: {node1: 0, node2: 0, node3: 0},
node2: {node1: 1, node2: 0, node3: 0},
node3: {node1: 1, node2: 1, node3: 0},
}
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
hit_checker = HitChecker([node1, node2, node3])
assert not hit_checker.canPrintAfter(node1, [node2])
assert not hit_checker.canPrintAfter(node1, [node3])
assert not hit_checker.canPrintAfter(node1, [node2, node3])
assert not hit_checker.canPrintAfter(node1, [node3, node2])
assert hit_checker.canPrintAfter(node2, [node1])
assert not hit_checker.canPrintAfter(node2, [node3])
assert not hit_checker.canPrintAfter(node2, [node1, node3])
assert not hit_checker.canPrintAfter(node2, [node3, node1])
assert hit_checker.canPrintAfter(node3, [node1])
assert hit_checker.canPrintAfter(node3, [node2])
assert hit_checker.canPrintAfter(node3, [node1, node2])
assert hit_checker.canPrintAfter(node3, [node2, node1])
def test_calculateScore():
node1 = CuraSceneNode(no_setting_override=True)
node2 = CuraSceneNode(no_setting_override=True)
node3 = CuraSceneNode(no_setting_override=True)
hit_map = {
node1: {node1: 0, node2: 0, node3: 0}, # sum is 0
node2: {node1: 1, node2: 0, node3: 0}, # sum is 1
node3: {node1: 1, node2: 1, node3: 0}, # sum is 2
}
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
hit_checker = HitChecker([node1, node2, node3])
# score is a diff between sums
assert hit_checker.calculateScore(node1, node2) == -1
assert hit_checker.calculateScore(node2, node1) == 1
assert hit_checker.calculateScore(node1, node3) == -2
assert hit_checker.calculateScore(node3, node1) == 2
assert hit_checker.calculateScore(node2, node3) == -1
assert hit_checker.calculateScore(node3, node2) == 1
def test_canPrintNodesInProvidedOrder():
node1 = CuraSceneNode(no_setting_override=True)
node2 = CuraSceneNode(no_setting_override=True)
node3 = CuraSceneNode(no_setting_override=True)
# nodes can be printed only in order node1 -> node2 -> node3
hit_map = {
node1: {node1: 0, node2: 0, node3: 0}, # 0
node2: {node1: 1, node2: 0, node3: 0}, # 1
node3: {node1: 1, node2: 1, node3: 0}, # 2
}
with patch.object(HitChecker, "_buildHitMap", return_value=hit_map):
hit_checker = HitChecker([node1, node2, node3])
assert hit_checker.canPrintNodesInProvidedOrder([node1, node2, node3])
assert not hit_checker.canPrintNodesInProvidedOrder([node1, node3, node2])
assert not hit_checker.canPrintNodesInProvidedOrder([node2, node1, node3])
assert not hit_checker.canPrintNodesInProvidedOrder([node2, node3, node1])
assert not hit_checker.canPrintNodesInProvidedOrder([node3, node1, node2])
assert not hit_checker.canPrintNodesInProvidedOrder([node3, node2, node1])