Python 了解Transcrypt自动测试如何记录代码
自动测试是Transcrypt文档的组成部分。然而,我很难理解它们是如何揭示预期行为的。例如: 我真的不知道什么是正确的/预期的答案。如何解释如下测试Python 了解Transcrypt自动测试如何记录代码,python,transcrypt,Python,Transcrypt,自动测试是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) 自动测试在CPython和Transcrypt下运行。将结果加载到浏览器时,结果将自动验证为相同。这被称为“背对背测试”,它是调用check函数所做的。所以Tr
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)
自动测试在CPython和Transcrypt下运行。将结果加载到浏览器时,结果将自动验证为相同。这被称为“背对背测试”,它是调用
check
函数所做的。所以Transcrypt的正确行为简单地(“操作上”)定义为CPython行为。与大多数脚本语言一样,Python缺乏正式的语义规范
Transcrypt支持大约95%的CPython。Transcrypt是一个Python到JavaScript的编译器,它的内部结构完全不同。这尤其适用于CPython的所谓“神奇方法”(以_;开头和结尾的方法),尽管例如对于运算符重载,Transcrypt也支持其中许多方法。自动测试中的所有功能都支持相同的行为,因此它们一起在Transcrypt中列出了“您可以做什么”
您可以按如下方式自行运行自动测试,例如Transcrypt基本测试:
- 转到transcrypt安装中的文件夹…/development/automated_tests/transcrypt
- 在命令提示下,键入:transcrypt-r-c-da autotest.py
- 之后,在命令提示下键入:transcrypt-c-da autotest.py
- 在浏览器中打开生成的文件autotest.html
- 每当向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
__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')
不是
库软件包的代码也可以自动测试,并使用复杂的数学算法,例如2D FFT(使用复数将图像转换为频率阵列,这是必要的),以保持代码的相似性
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
__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')
\uuuuu pragma\uuuuu('opov'))
orig2=num.zeros((128128),“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(),'
')
如果传送:
timestartft=getNow()
freqs2=fft.fft2(orig2)
如果传送:
timestopft=getNow()
autoTester.check('Frequencies',num.round(freqs2+delta,3)[64:68,16:112]。tolist(),'
'))
如果传送:
timestartift=getNow()
重构r2=fft.ifft2(频率2)
如果传送:
timestopift=getNow()
如果传送:
打印({}ms采集的{}个样本的FFT2)。格式(orig2.size,timestopft-timestartft))
打印({}ms采集的{}个样本的IFFT2)。格式(orig2.size,timeStopIfft-timeStartIfft))
autoTester.check('Reconstructured samples',num.round(ReconstructurR2+delta,3)[64:68,16:112].tolist(),'
')
__布拉格语(“noopov”)
防止破碎。因此,每当有人向Transcrypt捐款时,鼓励他/她加入自动测试。正则表达式模块就是一个很好的例子,它附带了大量的自动测试
请注意,自动测试很难帮助您学习Python。有很多关于这方面的教程和书籍,例如Alex Martelli、Anna Ravencroft和Steve Holden的《简而言之Python》
有关Transcrypts自动测试设备内部工作的更多信息,请参见: