自动测试是Transcrypt文档的一个组成部分。然而,我很难理解他们是如何揭示预期的行为的。例如:.py中
我真不知道什么是正确的/预期的答案。如何像下面这样解释测试?
autoTester.check (b.p, b.q, b.r, b.s)
b.p = 4
b.r = 5
autoTester.check (b.p, b.q, b.r, b.s)发布于 2017-06-06 06:37:11
自动测试在CPython和Transcrypt下运行。当将结果加载到浏览器中时,会自动验证结果是相同的。这被称为“背对背测试”,对check函数的调用就是这样做的。因此,Transcrypt的正确行为被简单地(“操作”)定义为CPython行为。Python和大多数脚本语言一样,缺乏一个正式的语义规范。
跨隐窝支持约95%的CPython。Transcrypt的内部结构(从Python到JavaScript编译器)是完全不同的。这尤其适用于CPython的所谓“魔术方法”(以__开头和结尾的方法),尽管,例如对于操作符重载,许多方法也是由Transcrypt支持的。所有在自动测试中的特性都以相同的行为得到支持,因此它们一起在Transcrypt中列出了“您可以做什么”。
您可以按照以下方式运行自动测试,例如,对于Transcrypt基本测试:
单击蓝色(或不希望是红色)行,以查看要比较的代码的结果。这应该是不足为奇的:所有的自动测试确实只是确认他们的跨密码行为仅仅是CPython行为。
"Hello“的自动测试结果有故意错误:

Transcrypt的基本特性自动测试结果:

自动测试的价值是双重的:
当然,像这样的测试
autoTester.check (b.p, b.q, b.r, b.s)
b.p = 4
b.r = 5
autoTester.check (b.p, b.q, b.r, b.s)虽然完全覆盖是必需的,但这是相当微不足道的。然而,例如操作符重载代码,如
def __matmul__ (self, other):
result = Matrix (self.nRows, other.nCols)
for iTargetRow in range (result.nRows):
for iTargetCol in range (result.nCols):
for iTerm in range (self.nCols):
result._ [iTargetRow][iTargetCol] += self._ [iTargetRow][iTerm] * other._ [iTerm][iTargetCol]
return result不是的。
库包的代码也可以进行自动测试,使用复杂的数学算法,例如2Dfft(使用复数将图像转换为频率数组,这是努姆氪的一部分),这是保持代码如下所必需的。
__pragma__ ('opov')
orig2 = num.zeros ((128, 128), 'complex128')
orig2 [32 : 96, 32 : 96] = num.ones ((64, 64), 'complex128')
autoTester.check ('Original samples', num.round (orig2 + delta, 3) [64 : 68, 16 : 112] .tolist (), '<br>')
if transpiled:
timeStartFft = getNow ()
freqs2 = fft.fft2 (orig2)
if transpiled:
timeStopFft = getNow ()
autoTester.check ('Frequencies', num.round (freqs2 + delta, 3) [64 : 68, 16 : 112] .tolist (), '<br>')
if transpiled:
timeStartIfft = getNow ()
reconstr2 = fft.ifft2 (freqs2)
if transpiled:
timeStopIfft = getNow ()
if transpiled:
print ('FFT2 for {} samples took {} ms'.format (orig2.size, timeStopFft - timeStartFft))
print ('IFFT2 for {} samples took {} ms'.format (orig2.size, timeStopIfft - timeStartIfft))
autoTester.check ('Reconstructed samples', num.round (reconstr2 + delta, 3) [64 : 68, 16 : 112] .tolist (), '<br>')
__pragma__ ('noopov')不被打破。因此,每当有人对跨地窖做出贡献时,就会鼓励他/她加入一个自动测试。这方面的一个很好的例子是正则表达式模块,它附带了大量的自动测试。
请注意,自动测试很难帮助您学习Python本身。有许多关于这方面的教程和书籍。"Python在一个简单的“亚历克斯马泰利,安娜拉文斯克罗夫特和史蒂夫霍顿。
有关Transcrypts自动测试设施内部工作的更多信息在这里找到:
transcrypt.html
https://stackoverflow.com/questions/44380590
复制相似问题