首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解Transcrypt自动测试如何记录代码

了解Transcrypt自动测试如何记录代码
EN

Stack Overflow用户
提问于 2017-06-06 02:45:05
回答 1查看 109关注 0票数 2

自动测试是Transcrypt文档的一个组成部分。然而,我很难理解他们是如何揭示预期的行为的。例如:.py

我真不知道什么是正确的/预期的答案。如何像下面这样解释测试?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2017-06-06 06:37:11

自动测试在CPython和Transcrypt下运行。当将结果加载到浏览器中时,会自动验证结果是相同的。这被称为“背对背测试”,对check函数的调用就是这样做的。因此,Transcrypt的正确行为被简单地(“操作”)定义为CPython行为。Python和大多数脚本语言一样,缺乏一个正式的语义规范。

跨隐窝支持约95%的CPython。Transcrypt的内部结构(从Python到JavaScript编译器)是完全不同的。这尤其适用于CPython的所谓“魔术方法”(以__开头和结尾的方法),尽管,例如对于操作符重载,许多方法也是由Transcrypt支持的。所有在自动测试中的特性都以相同的行为得到支持,因此它们一起在Transcrypt中列出了“您可以做什么”。

您可以按照以下方式运行自动测试,例如,对于Transcrypt基本测试:

  • 转到您的Transcrypt安装中的文件夹./development/automated_test/Transcrypt
  • 在命令提示符下键入: transcrypt -r -c -da autotest.py
  • 之后,在命令提示符下键入: transcrypt -c -da autotest.py
  • 在浏览器中打开生成的文件autotest.html

单击蓝色(或不希望是红色)行,以查看要比较的代码的结果。这应该是不足为奇的:所有的自动测试确实只是确认他们的跨密码行为仅仅是CPython行为。

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

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

自动测试的价值是双重的:

  • 只要在Transcrypt中添加了一个特性,就很容易确保什么都没有掉下来(回归测试)。
  • 通过自考的来源阅读将给人一个良好的印象,哪些功能是支持的。

当然,像这样的测试

代码语言:javascript
复制
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)

虽然完全覆盖是必需的,但这是相当微不足道的。然而,例如操作符重载代码,如

代码语言:javascript
复制
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(使用复数将图像转换为频率数组,这是努姆氪的一部分),这是保持代码如下所必需的。

代码语言:javascript
复制
__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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44380590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档