好的,我一直在研究随机图像选择器和队列系统(所以你不经常看到相同的图像).
一切都在游泳(就我的蹩脚代码而言),直到我得到随机位.我想测试它,但你如何测试呢?没有Debug.Assert(i.IsRandom)
(遗憾地):D
所以,在用一些茶浇水之后,我把它的大脑放在上面并提出以下内容,我只是想知道我是否能想到你的想法?
基本上我知道随机位是问题,所以我把它撕成了一个委托(然后将其传递给对象构造函数).
然后我创建了一个几乎与实时代码执行相同逻辑的类,但是记住在私有变量中选择的值.
然后我把那个代表扔到了直播课上并对其进行了测试:
即
Debug.Assert(myObj.RndVal == RndIntTester.ValuePassed);
但我忍不住想,我是在浪费时间吗?我通过大量的迭代运行它,看看它是否随时崩溃等.
你觉得我在浪费时间吗?或者我可以逃脱:
GateKiller的回答让我想起了这个:
我应该补充一点,我基本上不希望从Y大小的池中看到与X次相同的结果.
添加测试容器基本上允许我查看是否"随机"选择了任何先前选择的图像.
我在技术上认为这里的东西不是在RNG中进行测试(因为我从未编写过该代码),而是我希望从有限的池中随机获得结果,并且我想跟踪它们.
Amy B.. 6
根据要求进行测试:"因此您不会经常看到相同的图像"
要求100张图片.你经常看到一个图像吗?
根据要求进行测试:"因此您不会经常看到相同的图像"
要求100张图片.你经常看到一个图像吗?
在维基百科上有一个方便的统计随机性测试列表和相关研究.请注意,您肯定不知道某个源是大多数这些源的真正随机源,您只能排除某些可以轻松预测的方式.
如果您有一组固定的项目,并且您不希望它们过于频繁地重复,则随机地对该集合进行随机播放.然后你将确保你连续两次看不到相同的图像,感觉你正在收听Top 20收音机等等.你会在重复之前完成整个收集.
Item[] foo = … for (int idx = foo.size(); idx > 1; --idx) { /* Pick random number from half-open interval [0, idx) */ int rnd = random(idx); Item tmp = foo[idx - 1]; foo[idx - 1] = foo[rnd]; foo[rnd] = tmp; }
如果您有太多的项目要一次收集和随机播放(存储库中数以万计的图像),您可以为同一种方法添加一些分而治之.随机播放图像组,然后对每组进行随机播放.
听起来可能适用于修订后的问题陈述的略有不同的方法是让"图像选择器"实现将其最近的选择历史保留在Y
最长的队列中.在返回图像之前,它会测试它是否X
已经在队列中时间,如果是,它会随机选择另一个,直到它找到一个通过.
如果您真的要求测试随机数生成器的质量,我将不得不打开统计书.