給定兩個矩形r1和r2我嘗試測試兩個相交。 爲什麼以下兩個函數不能產生相同的輸出?與Python相交的矩形
功能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
這裏的一個測試用例失敗:
assert 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)
你是什麼意思失敗?崩潰或只是不說他們相交? – DiegoNolan 2013-04-08 21:31:57
@DiegoNolan如果你運行提供的代碼,你會發現最後的等號返回「False」,但不應該。 – askewchan 2013-04-08 21:36:27
@DiegoNolan斷言失敗。有關詳細信息,請參閱最新的問 – mre 2013-04-08 21:37:37