生成假设为 python 的随机数数组
generate an array of random numbers with hypothesis in python
我有一个似乎工作正常的排序算法,但我想用随机样本对其进行更多测试。
因此,为了对其进行测试,我尝试生成假设为 Python 的随机数组,我希望这些数组具有不同的长度并包含任何随机数。然而,假设似乎停留在只用数字“1”填充数组
这是我的代码:
def mysorting_function function(ArrToSort):
#...
@given (
i= lists( integers(min_value=1) )
)
def test_partition(i):
#sort the random array i
mysorting_function(i)
#run the test to check if it is sorted
for i in range( len(i)-1):
assert a[i]<= a[i+1]
然而,当我打印测试输出时,假设生成的样本是:
[1]
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1]
[1]
如果我删除 min_value=1
,我得到的数组为 0,如果我输入 min_value=2
,我得到的数组只有 2!这很奇怪,我希望这些值是随机的。
有人可以帮我解释一下我做错了什么吗?有没有我需要初始化的随机种子?缺少参数?我的导入有问题吗?
提前致谢
p.s:我知道还有其他方法可以生成随机列表,但我想开始使用假设:)
from hypothesis.strategies import lists, integers, given
def func(i):
return sorted(i)
@given(i=lists(integers(min_value=1, max_value=1e12)))
def test_partition(i):
a = func(i)
for k in range(len(i) - 1):
print(f"Given: {i}")
assert a[k] <= a[k + 1]
运行 使用
pytest tmp.py -s
platform darwin -- Python 3.6.12, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /Users/krishna.singh
plugins: hypothesis-5.36.1
collected 1 item
tmp.py Given: [], Sorted: []
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [122661386], Sorted: [122661386]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [], Sorted: []
Given: [1], Sorted: [1]
Given: [274042271187, 26280, 3469576980, 62595], Sorted: [26280, 62595, 3469576980, 274042271187]
Given: [26280, 26280, 3469576980, 62595], Sorted: [26280, 26280, 62595, 3469576980]
Given: [131, 58771, 43, 459711760009, 22071, 2072838034, 796926885113, 970422184418, 1757], Sorted: [43, 131, 1757, 22071, 58771, 2072838034, 459711760009, 796926885113, 970422184418]
Given: [33286, 58771, 43, 459711760009, 22071, 2072838034, 796926885113, 970422184418, 1757], Sorted: [43, 1757, 22071, 33286, 58771, 2072838034, 459711760009, 796926885113, 970422184418]
Given: [225, 2063187514, 59787, 30, 19115], Sorted: [30, 225, 19115, 59787, 2063187514]
Given: [32241, 222], Sorted: [222, 32241]
Given: [32241, 222], Sorted: [222, 32241]
Given: [467990765333], Sorted: [467990765333]
Given: [467990765333, 467990765333, 4223774210, 223411433807, 56529], Sorted: [56529, 4223774210, 223411433807, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 33276335, 223411433807, 56529], Sorted: [56529, 33276335, 223411433807, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 4223774210, 223411433807, 56529], Sorted: [56529, 4223774210, 223411433807, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 33276335, 309, 33610961], Sorted: [309, 33276335, 33610961, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 33610961, 309, 33610961], Sorted: [309, 33610961, 33610961, 467990765333, 467990765333]
Given: [467990765333, 467990765333], Sorted: [467990765333, 467990765333]
Given: [59, 29978, 362493699905, 134, 58229], Sorted: [59, 134, 29978, 58229, 362493699905]
Given: [14851, 29978, 362493699905, 134, 58229], Sorted: [134, 14851, 29978, 58229, 362493699905]
Given: [14851, 29978, 362493699905, 134, 58229], Sorted: [134, 14851, 29978, 58229, 362493699905]
Given: [14851, 29978, 362493699905, 134, 58229], Sorted: [134, 14851, 29978, 58229, 362493699905]
Given: [142, 489066059452], Sorted: [142, 489066059452]
Given: [605624009221, 146, 34956, 601792711832, 57058, 36345, 11448, 28, 65312, 61727, 48367, 31458, 31641, 560287896129, 26498], Sorted: [28, 146, 11448, 26498, 31458, 31641, 34956, 36345, 48367, 57058, 61727, 65312, 560287896129, 601792711832, 605624009221]
Given: [36099, 4395827713], Sorted: [36099, 4395827713]
Given: [36099, 4395827713], Sorted: [36099, 4395827713]
Given: [36099, 4395827713, 3329724595], Sorted: [36099, 3329724595, 4395827713]
Given: [36099, 263, 4362142151], Sorted: [263, 36099, 4362142151]
我可能在打印过程中做错了什么,但是正如您所看到的,假设库生成了不同的输出
我有一个似乎工作正常的排序算法,但我想用随机样本对其进行更多测试。 因此,为了对其进行测试,我尝试生成假设为 Python 的随机数组,我希望这些数组具有不同的长度并包含任何随机数。然而,假设似乎停留在只用数字“1”填充数组
这是我的代码:
def mysorting_function function(ArrToSort):
#...
@given (
i= lists( integers(min_value=1) )
)
def test_partition(i):
#sort the random array i
mysorting_function(i)
#run the test to check if it is sorted
for i in range( len(i)-1):
assert a[i]<= a[i+1]
然而,当我打印测试输出时,假设生成的样本是:
[1]
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1]
[1]
如果我删除 min_value=1
,我得到的数组为 0,如果我输入 min_value=2
,我得到的数组只有 2!这很奇怪,我希望这些值是随机的。
有人可以帮我解释一下我做错了什么吗?有没有我需要初始化的随机种子?缺少参数?我的导入有问题吗?
提前致谢
p.s:我知道还有其他方法可以生成随机列表,但我想开始使用假设:)
from hypothesis.strategies import lists, integers, given
def func(i):
return sorted(i)
@given(i=lists(integers(min_value=1, max_value=1e12)))
def test_partition(i):
a = func(i)
for k in range(len(i) - 1):
print(f"Given: {i}")
assert a[k] <= a[k + 1]
运行 使用 pytest tmp.py -s
platform darwin -- Python 3.6.12, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /Users/krishna.singh
plugins: hypothesis-5.36.1
collected 1 item
tmp.py Given: [], Sorted: []
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [122661386], Sorted: [122661386]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [1], Sorted: [1]
Given: [], Sorted: []
Given: [1], Sorted: [1]
Given: [274042271187, 26280, 3469576980, 62595], Sorted: [26280, 62595, 3469576980, 274042271187]
Given: [26280, 26280, 3469576980, 62595], Sorted: [26280, 26280, 62595, 3469576980]
Given: [131, 58771, 43, 459711760009, 22071, 2072838034, 796926885113, 970422184418, 1757], Sorted: [43, 131, 1757, 22071, 58771, 2072838034, 459711760009, 796926885113, 970422184418]
Given: [33286, 58771, 43, 459711760009, 22071, 2072838034, 796926885113, 970422184418, 1757], Sorted: [43, 1757, 22071, 33286, 58771, 2072838034, 459711760009, 796926885113, 970422184418]
Given: [225, 2063187514, 59787, 30, 19115], Sorted: [30, 225, 19115, 59787, 2063187514]
Given: [32241, 222], Sorted: [222, 32241]
Given: [32241, 222], Sorted: [222, 32241]
Given: [467990765333], Sorted: [467990765333]
Given: [467990765333, 467990765333, 4223774210, 223411433807, 56529], Sorted: [56529, 4223774210, 223411433807, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 33276335, 223411433807, 56529], Sorted: [56529, 33276335, 223411433807, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 4223774210, 223411433807, 56529], Sorted: [56529, 4223774210, 223411433807, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 33276335, 309, 33610961], Sorted: [309, 33276335, 33610961, 467990765333, 467990765333]
Given: [467990765333, 467990765333, 33610961, 309, 33610961], Sorted: [309, 33610961, 33610961, 467990765333, 467990765333]
Given: [467990765333, 467990765333], Sorted: [467990765333, 467990765333]
Given: [59, 29978, 362493699905, 134, 58229], Sorted: [59, 134, 29978, 58229, 362493699905]
Given: [14851, 29978, 362493699905, 134, 58229], Sorted: [134, 14851, 29978, 58229, 362493699905]
Given: [14851, 29978, 362493699905, 134, 58229], Sorted: [134, 14851, 29978, 58229, 362493699905]
Given: [14851, 29978, 362493699905, 134, 58229], Sorted: [134, 14851, 29978, 58229, 362493699905]
Given: [142, 489066059452], Sorted: [142, 489066059452]
Given: [605624009221, 146, 34956, 601792711832, 57058, 36345, 11448, 28, 65312, 61727, 48367, 31458, 31641, 560287896129, 26498], Sorted: [28, 146, 11448, 26498, 31458, 31641, 34956, 36345, 48367, 57058, 61727, 65312, 560287896129, 601792711832, 605624009221]
Given: [36099, 4395827713], Sorted: [36099, 4395827713]
Given: [36099, 4395827713], Sorted: [36099, 4395827713]
Given: [36099, 4395827713, 3329724595], Sorted: [36099, 3329724595, 4395827713]
Given: [36099, 263, 4362142151], Sorted: [263, 36099, 4362142151]
我可能在打印过程中做错了什么,但是正如您所看到的,假设库生成了不同的输出