小编Str*_*667的帖子

如何在 SQLAlchemy 中测试回滚

我在测试逻辑时遇到测试隔离问题,这涉及 SQLAlchemy 中的事务回滚。

型号:

class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    company = db.Column(db.Text)
    subtype = db.Column(db.Text)

    __table_args__ = (db.UniqueConstraint(company, subtype),)
Run Code Online (Sandbox Code Playgroud)

查看

def create():
    instance = Product(**request.json)
    db.session.add(instance)
    try:
        db.session.commit()
    except IntegrityError:
        db.session.rollback()
        return {"detail": "Product object already exists", "status": 406, "title": "Duplicate object"}, 406
    return {"uri": f"/products/{instance.id}"}, 201
Run Code Online (Sandbox Code Playgroud)

测试

DEFAULT_DATA = {"company": "Test", "subtype": "Sub"}


def test_create(client):
    response = client.post("/products", json=DEFAULT_DATA)
    assert response.status_code == 201
    instance = Product.query.one()
    assert response.json == {"uri": f"/products/{instance.id}"}


def test_create_duplicate(client):
    response = …
Run Code Online (Sandbox Code Playgroud)

postgresql transactions sqlalchemy pytest python-3.x

5
推荐指数
0
解决办法
778
查看次数

如何以最小的精度损失检查大于 2 ^ 54 的 u64 数是否可以被 f64 整除?

对于u64小于 2 ^ 54 的数字,可以通过强制转换为 来完成,而不会造成太大的精度损失f64

((6 as f64) % 1.5) < f64::EPSILON
Run Code Online (Sandbox Code Playgroud)

对于较大的数字,将会有显着的精度损失:

1u64 << 63           // 9223372036854775808
(1u64 << 63) as f64  // 9223372036854776000
Run Code Online (Sandbox Code Playgroud)

并且将检查不同数字的可分性。

Context : JSONSchema 的multipleOf关键字实现

问题:检查不符合尾数大小(53)的u64/i64数字的可整性的最有效方法是什么?f64f64::MANTISSA_DIGITS

floating-point precision rust

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