2 つの長方形 r1 と r2 が与えられた場合、2 つが交差するかどうかをテストしようとします。次の 2 つの関数が同じ出力を生成しないのはなぜですか?
機能 1:
def separate_helper(r1, r2):
r1_left, r1_top, r1_right, r1_bottom = r1
r2_left, r2_top, r2_right, r2_bottom = r2
if r1_right < r2_left:
separate = True
elif r1_left > r2_right:
separate = True
elif r1_top > r2_bottom:
separate = True
elif r1_bottom < r2_top:
separate = True
elif contains(r1, r2):
separate = False
else:
separate = False
return separate
機能 2:
def separate_helper2(r1, r2):
r1_left, r1_top, r1_right, r1_bottom = r1
r2_left, r2_top, r2_right, r2_bottom = r2
separate = r1_right < r2_left or \
r1_left > r2_right or \
r1_top > r2_bottom or \
r1_bottom < r2_top or \
not contains(r1, r2)
return separate
長方形 1 に長方形 2 が含まれているかどうかを確認する関数:
def contains(r1, r2):
r1_left, r1_top, r1_right, r1_bottom = r1
r2_left, r2_top, r2_right, r2_bottom = r2
return r1_right >= r2_right and r1_left <= r2_left and r1_top <= r2_top and r1_bottom >= r2_bottom
失敗するテストケースは次のとおりです。
アサート separate_helper([29, 35, 53, 90], [23, 47, 90, 86]) == separate_helper2([29, 35, 53, 90], [23, 47, 90, 86])
四角形 1 に四角形 2 が含まれている場合にのみ失敗しますが、その理由がわかりません。
編集:
関数をテストするためにPythonと鼻のクイックチェックを使用しています。私が使用しているテストコードは次のとおりです。
from qc import forall, lists, integers
from intersect import separate_helper, separate_helper2
@forall(tries=100, r1=lists(items=integers(), size=(4, 4)), r2=lists(items=integers(), size=(4, 4)))
def test_separate(r1, r2):
assert separate_helper(r1, r2) == separate_helper2(r1, r2)