小编jac*_*acg的帖子

pytest:对同一接口的不同实现的可重用测试

想象一下,我已经实现了一个Bar在模块中调用的实用程序(可能是一个类)foo,并为它编写了以下测试.

test_foo.py:

from foo import Bar as Implementation
from pytest import mark

@mark.parametrize(<args>, <test data set 1>)
def test_one(<args>):
    <do something with Implementation and args>

@mark.parametrize(<args>, <test data set 2>)
def test_two(<args>):
    <do something else with Implementation and args>

<more such tests>
Run Code Online (Sandbox Code Playgroud)

现在想象一下,在未来我希望能够编写相同接口的不同实现.我希望这些实现能够重用为上述测试套件编写的测试:唯一需要改变的是

  1. 进口的 Implementation
  2. <test data set 1>,<test data set 2>等等.

所以我正在寻找一种以可重用的方式编写上述测试的方法,这将允许接口的新实现的作者能够通过将实现和测试数据注入其中来使用测试,而无需修改包含测试原始规范的文件.

在pytest中这样做的好方法是什么呢?

================================================== ==================

================================================== ==================

这是一个单元测试版本(不漂亮但是)有效.

define_tests.py:

# Single, reusable definition of tests for the interface. Authors of
# new …
Run Code Online (Sandbox Code Playgroud)

python unit-testing pytest

13
推荐指数
1
解决办法
2691
查看次数

decltype和类成员名称之间的交互阴影外部名称

这段代码

int clash;

struct Foo {
  decltype(clash) clash;
};
Run Code Online (Sandbox Code Playgroud)

在clang上静默编译,但无法在gcc上编译给出错误

错误:'int Foo :: clash'的声明[-fpermissive]

错误:从'int clash'改变'clash'的含义[-fpermissive]

看起来错误需要2个成分:

  1. 阴影必须由类成员完成(如果它是函数的本地范围则没有问题).

  2. 在声明[阴影名称]之前,必须在阴影范围内使用decltype([阴影名称]).

我的问题是双重的:

  1. gcc是否有理由拒绝此代码?
  2. 在标准中它在哪里这样说?

c++ gcc scope decltype language-lawyer

8
推荐指数
1
解决办法
418
查看次数

Numba vs Cython循环优化

考虑以下四种功能(python,numba,cythonsmart给定的相同的整数输入时),其计算相同的反应

def python(n):
    total = 0
    for m in range(1,n+1):
        total += m
    return total

from numba import jit
numba = jit(python)

cpdef int cython(int n):
    cdef int total = 0
    cdef int m
    for m in range(1, n+1):
        total += m
    return total

def smart(n):
    return n * (n + 1) // 2
Run Code Online (Sandbox Code Playgroud)

他们的执行时间让我感到有些惊讶

  1. numba运行时间独立于n(虽然cython是线性的n)
  2. numba 比...慢 smart

这立即引发了两个问题:

  1. 为什么Numba,但不是Cython,能够把它变成一个恒定时间算法?
  2. 鉴于Numba 确实设法将其转换为常量时间算法,为什么它比纯Python的常量时间函数慢smart …

python cython numba

8
推荐指数
1
解决办法
2264
查看次数

如何让基本的交互式 pyqtgraph 绘图在 IPython REPL 或 Jupyter 控制台中工作?

打字

import pyqtgraph as pg
pg.plot([1,2,3,2,3])
Run Code Online (Sandbox Code Playgroud)

进入标准 Python REPL 将打开一个包含数据图的窗口。在 IPython REPL 或 Jupyter 控制台中输入完全相同的代码,不会打开这样的窗口。

[可以通过键入 来显示该窗口pg.QtGui.QApplication.exec_(),但随后 REPL 会被阻止。

或者,当尝试退出 REPL 并需要确认时,会出现该窗口。

这两点都非常令人不满意。]

如何使用 IPython REPL 进行基本的交互式 pyqtgraph 绘图?

[在 IPython 5.1.0 和 Jupyter 5.0.0 以及 Python 3.5 和 3.6 以及 PyQt4 和 PyQt5(无 PySide)中观察到所描述的行为]

ipython pyqtgraph

6
推荐指数
1
解决办法
5568
查看次数

Pyqtgraph:在哪里可以找到关键前提的信号?

以下示例显示了如何在中将可调用的任意python连接到鼠标运动事件GraphicsWindow。对于按键事件,您将如何做?

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg

app = pg.mkQApp()
win = pg.GraphicsWindow()
pl = win.addPlot()
pl.plot([x*x for x in range(-10,11)])

def mouseMoved(evt):
    print("Mouse moved event: {}".format(evt))

pl.scene().sigMouseMoved.connect(mouseMoved)

def keyPressed(evt):
    print("Key pressed")

# The scene doesn't have an equivalent signal for key presses
# pl.scene().sigKeyPressed.connect(keyPress)

app.exec_()
Run Code Online (Sandbox Code Playgroud)

python pyqtgraph

5
推荐指数
1
解决办法
1100
查看次数

如何理解numpy.nextafter的结果

考虑以下调用 numpy.nextafter

>>> from numpy import nextafter
>>> nextafter( 0.1, -1)
0.099999999999999992
>>> nextafter( 0.1, +1)
0.10000000000000002
>>> nextafter( 1  , -1)
0.99999999999999989
>>> nextafter( 1  , +1)
1.0
>>> nextafter(10  , -1)
9.9999999999999982
>>> nextafter(10  , +1)
9.9999999999999982
Run Code Online (Sandbox Code Playgroud)

我希望第二个参数为正的所有情况都返回一个大于第一个参数的值;并且只要第二个参数小于零,结果就会小于第一个参数。

表现出的行为不符合我的期望,特别是:

  1. nextafter(1, +1) 根本不改变第一个输入,而不是增加它。
  2. nextafter(10, +1) 减少第一个输入,而不是增加它。

这是错误还是功能?

这些示例是在 Python 3.6.1 上使用 Numpy 1.13.1 生成的

python floating-point numpy

3
推荐指数
1
解决办法
783
查看次数

是否有一个实用程序可以在Haskell中轻松编写参数化测试?

一方面,我们有自动化测试,检查一个具体的例子.另一方面,我们在QuickCheck中进行了基于属性的测试,我们提供了属性,而框架提供了示例,但我们可能必须解释如何生成示例.

在这两个极端之间的某个地方是编写单个测试或属性并在多个用户提供的示例上运行它的可能性.Haskell测试环境中有哪些实用程序可以帮助编写这样的参数化测试?

作为一个具体的例子,这里是如何在Python中完成的pytest.我想检查该len函数是否为各种输入提供了正确的输出.这可以通过编写单个测试来完成,该测试检查某些输入的长度是测试人员期望的长度,并使用大量输入示例和相应的预期结果对测试进行参数化.

from pytest import mark

param = mark.parametrize

@param('input, expected',
       ((''  ,    0),
        ('a' ,    1),
        ('b' ,    1),
        ('ab',    2),
        ('xx',    3), # deliberate mistake
        ('xyz',   3),
        ('aaabc', 5)
       ))
def test_len(input, expected):
    assert len(input) == expected
Run Code Online (Sandbox Code Playgroud)

哪个产生这样的ouptut:

len_test.py::test_len[-0] PASSED                      [ 14%]
len_test.py::test_len[a-1] PASSED                     [ 28%]
len_test.py::test_len[b-1] PASSED                     [ 42%]
len_test.py::test_len[ab-2] PASSED                    [ 57%]
len_test.py::test_len[xx-3] FAILED                    [ 71%]  (appears red)
len_test.py::test_len[xyz-3] PASSED                   [ 85%]
len_test.py::test_len[aaabc-5] PASSED                 [100%]

========================= FAILURES ==========================
______________________ test_len[xx-3] _______________________ …
Run Code Online (Sandbox Code Playgroud)

testing haskell

3
推荐指数
1
解决办法
63
查看次数