Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 了解Transcrypt自动测试如何记录代码_Python_Transcrypt - Fatal编程技术网

Python 了解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

自动测试是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
函数所做的。所以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行为只是CPython行为

“Hello world”的自动测试结果有故意错误:

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)
,虽然需要完整的覆盖范围,但它是非常琐碎的。但是,例如运算符重载代码,如

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自动测试设备内部工作的更多信息,请参见: