コード例 #1
0
def test_set_min_max():
    # without momentum
    g = Gauge(5, 10)
    assert g.get_max() == 10
    assert g.get_min() == 0
    assert g.get() == 5
    g.set_range(max=100, min=10)
    assert g.get_max() == 100
    assert g.get_min() == 10
    assert g.get() == 10
    g.set_min(10)
    assert g.get() == 10
    g.set_min(5)
    assert g.get() == 10
    g.set_range(max=5, min=0)
    assert g.get_max() == 5
    assert g.get_min() == 0
    assert g.get() == 5
    # with momentum
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 5), (5, 10)]
    g.set_max(50, at=0)
    assert g.determination == [(0, 5), (45, 50)]
    g.set_min(40, at=0)
    assert g.determination == [(0, 40), (10, 50)]
コード例 #2
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_set_min_max():
    # without momentum
    g = Gauge(5, 10)
    assert g.get_max() == 10
    assert g.get_min() == 0
    assert g.get() == 5
    g.set_range(max=100, min=10)
    assert g.get_max() == 100
    assert g.get_min() == 10
    assert g.get() == 10
    g.set_min(10)
    assert g.get() == 10
    g.set_min(5)
    assert g.get() == 10
    g.set_range(max=5, min=0)
    assert g.get_max() == 5
    assert g.get_min() == 0
    assert g.get() == 5
    # with momentum
    g = Gauge(5, 10, at=0)
    g.add_momentum(+1)
    assert g.determination == [(0, 5), (5, 10)]
    g.set_max(50, at=0)
    assert g.determination == [(0, 5), (45, 50)]
    g.set_min(40, at=0)
    assert g.determination == [(0, 40), (10, 50)]
コード例 #3
0
def test_thin_momenta():
    g = Gauge(0, 100, at=0)
    for x in range(1000):
        g.add_momentum(+1000000000, since=x, until=x + 1e-10)
    assert_all_in_range(g)
    assert g.get(0) == 0
    assert g.get(1001) == 100
    for x, y in zip(range(9999), range(1, 10000)):
        assert 0 <= g.get(x / 10.) <= g.get(y / 10.) <= 100
コード例 #4
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_hypergauge_with_different_base_time():
    g = Gauge(0, Gauge(10, 100, at=100), at=0)
    g.add_momentum(+1)
    assert g.max_gauge.get(0) == 10
    assert g.get(10) == 10
    g = Gauge(0, Gauge(10, 100, at=0), at=100)
    g.add_momentum(+1)
    assert g.max_gauge.get(100) == 10
    assert g.get(110) == 10
コード例 #5
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_thin_momenta():
    g = Gauge(0, 100, at=0)
    for x in range(1000):
        g.add_momentum(+1000000000, since=x, until=x + 1e-10)
    assert_all_in_range(g)
    assert g.get(0) == 0
    assert g.get(1001) == 100
    for x, y in zip(range(9999), range(1, 10000)):
        assert 0 <= g.get(x / 10.) <= g.get(y / 10.) <= 100
コード例 #6
0
def test_hypergauge_with_different_base_time():
    g = Gauge(0, Gauge(10, 100, at=100), at=0)
    g.add_momentum(+1)
    assert g.max_gauge.get(0) == 10
    assert g.get(10) == 10
    g = Gauge(0, Gauge(10, 100, at=0), at=100)
    g.add_momentum(+1)
    assert g.max_gauge.get(100) == 10
    assert g.get(110) == 10
コード例 #7
0
def test_over_max_on_hypergauge():
    g = Gauge(1, Gauge(10, 20, at=0), at=0)
    g.max_gauge.add_momentum(+1)
    with pytest.raises(ValueError):
        g.set(20, at=0)
    g.set(20, at=0, outbound=OK)
    assert g.get(at=0) == 20
    g.set(20, at=10)
    assert g.get(at=10) == 20
    assert g.get(at=0) == 20  # past was forgot
コード例 #8
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_decr_max_hyper():
    g = Gauge(0, Gauge(10, 100, at=0), at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.max_gauge.decr(5, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 5
    assert g.get(20) == 5
コード例 #9
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_over_max_on_hypergauge():
    g = Gauge(1, Gauge(10, 20, at=0), at=0)
    g.max_gauge.add_momentum(+1)
    with pytest.raises(ValueError):
        g.set(20, at=0)
    g.set(20, at=0, outbound=OK)
    assert g.get(at=0) == 20
    g.set(20, at=10)
    assert g.get(at=10) == 20
    assert g.get(at=0) == 20  # past was forgot
コード例 #10
0
def test_decr_max_hyper():
    g = Gauge(0, Gauge(10, 100, at=0), at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.max_gauge.decr(5, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 5
    assert g.get(20) == 5
コード例 #11
0
ファイル: frozengauge.py プロジェクト: mikeboracci/gauge
def test_same_determination():
    g = Gauge(10, 100, at=0)
    g.add_momentum(+1, since=5, until=10)
    g.add_momentum(+1, since=20, until=30)
    g.add_momentum(-2, since=50, until=60)
    fg = FrozenGauge(g)
    assert fg.get(0) == g.get(0) == 10
    assert fg.get(10) == g.get(10) == 15
    assert fg.get(30) == g.get(30) == 25
    assert fg.get(60) == g.get(60) == 5
    assert fg.get(100) == g.get(100) == 5
コード例 #12
0
ファイル: frozengauge.py プロジェクト: mnpk/gauge
def test_same_determination():
    g = Gauge(10, 100, at=0)
    g.add_momentum(+1, since=5, until=10)
    g.add_momentum(+1, since=20, until=30)
    g.add_momentum(-2, since=50, until=60)
    fg = FrozenGauge(g)
    assert fg.get(0) == g.get(0) == 10
    assert fg.get(10) == g.get(10) == 15
    assert fg.get(30) == g.get(30) == 25
    assert fg.get(60) == g.get(60) == 5
    assert fg.get(100) == g.get(100) == 5
コード例 #13
0
def test_decr_max_normal():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.set_max(5, at=10)
    g.set(10, outbound=OK, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 10
    assert g.get(15) == 5
    assert g.get(20) == 5
コード例 #14
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_ok_outbound():
    g = Gauge(1, 10)
    with pytest.raises(ValueError):
        g.set(11)
    with pytest.raises(ValueError):
        g.incr(100)
    with pytest.raises(ValueError):
        g.decr(100)
    g.set(10)
    assert g.get() == 10
    g.set(11, outbound=OK)
    assert g.get() == 11
コード例 #15
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_decr_max_normal():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+2)
    g.add_momentum(-1)
    assert g.base[TIME] == 0
    assert g.get(10) == 10
    g.set_max(5, at=10)
    g.set(10, outbound=OK, at=10)
    assert g.base[TIME] == 10
    assert g.get(10) == 10
    assert g.get(15) == 5
    assert g.get(20) == 5
コード例 #16
0
def test_ok_outbound():
    g = Gauge(1, 10)
    with pytest.raises(ValueError):
        g.set(11)
    with pytest.raises(ValueError):
        g.incr(100)
    with pytest.raises(ValueError):
        g.decr(100)
    g.set(10)
    assert g.get() == 10
    g.set(11, outbound=OK)
    assert g.get() == 11
コード例 #17
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_momenta_order():
    g = Gauge(0, 50, at=0)
    g.add_momentum(+3, since=0, until=5)
    g.add_momentum(+2, since=1, until=4)
    g.add_momentum(+1, since=2, until=3)
    assert g.get(0) == 0
    assert g.get(1) == 3
    assert g.get(2) == 8
    assert g.get(3) == 14
    g.decr(1, at=3)
    assert g.get(3) == 13
    assert g.get(4) == 18
    assert g.get(5) == 21
コード例 #18
0
def test_momenta_order():
    g = Gauge(0, 50, at=0)
    g.add_momentum(+3, since=0, until=5)
    g.add_momentum(+2, since=1, until=4)
    g.add_momentum(+1, since=2, until=3)
    assert g.get(0) == 0
    assert g.get(1) == 3
    assert g.get(2) == 8
    assert g.get(3) == 14
    g.decr(1, at=3)
    assert g.get(3) == 13
    assert g.get(4) == 18
    assert g.get(5) == 21
コード例 #19
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_clear_momenta():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1)
    g.clear_momenta(at=5)
    assert g.get(5) == 5
    assert g.determination == [(5, 5)]
    # clear momenta when the value is out of the range
    g.add_momentum(+1)
    g.set(15, outbound=OK, at=10)
    g.clear_momenta(at=10)
    assert g.get(10) == 15
    assert g.determination == [(10, 15)]
    # rebase by Gauge.clear_momenta()
    g.clear_momenta(100)
    assert g.get() == 100
コード例 #20
0
def test_clear_momenta():
    g = Gauge(0, 10, at=0)
    g.add_momentum(+1)
    g.clear_momenta(at=5)
    assert g.get(5) == 5
    assert g.determination == [(5, 5)]
    # clear momenta when the value is out of the range
    g.add_momentum(+1)
    g.set(15, outbound=OK, at=10)
    g.clear_momenta(at=10)
    assert g.get(10) == 15
    assert g.determination == [(10, 15)]
    # rebase by Gauge.clear_momenta()
    g.clear_momenta(100)
    assert g.get() == 100
コード例 #21
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_forget_past():
    g = Gauge(0, 50, at=0)
    g.add_momentum(+1, since=0, until=5)
    g.add_momentum(0, since=0)
    g.add_momentum(0, until=999)
    assert g.get(0) == 0
    assert g.get(1) == 1
    assert g.get(2) == 2
    assert g.get(3) == 3
    assert g.get(4) == 4
    assert g.get(5) == 5
    assert g.get(10) == 5
    assert g.get(20) == 5
    assert len(g.momenta) == 3
    g.forget_past(at=30)
    assert len(g.momenta) == 2
コード例 #22
0
def test_forget_past():
    g = Gauge(0, 50, at=0)
    g.add_momentum(+1, since=0, until=5)
    g.add_momentum(0, since=0)
    g.add_momentum(0, until=999)
    assert g.get(0) == 0
    assert g.get(1) == 1
    assert g.get(2) == 2
    assert g.get(3) == 3
    assert g.get(4) == 4
    assert g.get(5) == 5
    assert g.get(10) == 5
    assert g.get(20) == 5
    assert len(g.momenta) == 3
    g.forget_past(at=30)
    assert len(g.momenta) == 2
コード例 #23
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_clamped_by_max_gauge():
    # in_range, decr max -> clamp
    g = Gauge(10, Gauge(20, 20, at=0), at=0)
    assert g.get(0) == 10
    g.max_gauge.set(5, at=0)
    assert g.get(0) == 5
    # in_range, incr max -> not clamp
    g.max_gauge.set(15, at=0)
    assert g.get(0) == 5
    # outbound, decr max -> not clamp
    g.set(20, outbound=OK, at=0)
    assert g.get(0) == 20
    g.max_gauge.set(10, at=0)
    assert g.get(0) == 20
    # time-skewed
    g = Gauge(10, Gauge(20, 20, at=0), at=0)
    g.max_gauge.set(5, at=10)
    assert g.base[TIME] == 10
    assert g.base[VALUE] == 5
コード例 #24
0
def test_clamped_by_max_gauge():
    # in_range, decr max -> clamp
    g = Gauge(10, Gauge(20, 20, at=0), at=0)
    assert g.get(0) == 10
    g.max_gauge.set(5, at=0)
    assert g.get(0) == 5
    # in_range, incr max -> not clamp
    g.max_gauge.set(15, at=0)
    assert g.get(0) == 5
    # outbound, decr max -> not clamp
    g.set(20, outbound=OK, at=0)
    assert g.get(0) == 20
    g.max_gauge.set(10, at=0)
    assert g.get(0) == 20
    # time-skewed
    g = Gauge(10, Gauge(20, 20, at=0), at=0)
    g.max_gauge.set(5, at=10)
    assert g.base[TIME] == 10
    assert g.base[VALUE] == 5
コード例 #25
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_case8_simple():
    max_ = Gauge(10, 10, at=0)
    max_.add_momentum(-1)

    g = Gauge(10, max_, at=0)

    max_.forget_past(at=2)

    with pytest.raises(ValueError):
        max_.forget_past(at=1)  # forget older past.

    assert g.get(99999) == approx(0)
コード例 #26
0
def test_case8_simple():
    max_ = Gauge(10, 10, at=0)
    max_.add_momentum(-1)

    g = Gauge(10, max_, at=0)

    max_.forget_past(at=2)

    with pytest.raises(ValueError):
        max_.forget_past(at=1)  # forget older past.

    assert g.get(99999) == approx(0)
コード例 #27
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_clamp_outbound():
    g = Gauge(1, 10)
    g.set(11, outbound=CLAMP)
    assert g.get() == 10
    g.incr(100, outbound=CLAMP)
    assert g.get() == 10
    g.decr(100, outbound=CLAMP)
    assert g.get() == 0
    g.incr(3, outbound=CLAMP)
    assert g.get() == 3
    g.decr(1, outbound=CLAMP)
    assert g.get() == 2
    g.set(100, outbound=OK)
    g.incr(3, outbound=CLAMP)
    assert g.get() == 100
    g.decr(3, outbound=CLAMP)
    assert g.get() == 97
    g.set(98, outbound=CLAMP)
    assert g.get() == 97
    g.set(97, outbound=CLAMP)
    assert g.get() == 97
    g.set(96, outbound=CLAMP)
    assert g.get() == 96
コード例 #28
0
def test_clamp_outbound():
    g = Gauge(1, 10)
    g.set(11, outbound=CLAMP)
    assert g.get() == 10
    g.incr(100, outbound=CLAMP)
    assert g.get() == 10
    g.decr(100, outbound=CLAMP)
    assert g.get() == 0
    g.incr(3, outbound=CLAMP)
    assert g.get() == 3
    g.decr(1, outbound=CLAMP)
    assert g.get() == 2
    g.set(100, outbound=OK)
    g.incr(3, outbound=CLAMP)
    assert g.get() == 100
    g.decr(3, outbound=CLAMP)
    assert g.get() == 97
    g.set(98, outbound=CLAMP)
    assert g.get() == 97
    g.set(97, outbound=CLAMP)
    assert g.get() == 97
    g.set(96, outbound=CLAMP)
    assert g.get() == 96
コード例 #29
0
def test_case3():
    g = Gauge(0, 10, at=0)
    assert g.get(0) == 0
    g.add_momentum(+1, since=0)
    assert g.get(10) == 10
    g.incr(3, outbound=OK, at=11)
    assert g.get(11) == 13
    g.add_momentum(-1, since=13)
    assert g.get(13) == 13
    assert g.get(14) == 12
    assert g.get(15) == 11
    assert g.get(16) == 10
    assert g.get(17) == 10
コード例 #30
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_case3():
    g = Gauge(0, 10, at=0)
    assert g.get(0) == 0
    g.add_momentum(+1, since=0)
    assert g.get(10) == 10
    g.incr(3, outbound=OK, at=11)
    assert g.get(11) == 13
    g.add_momentum(-1, since=13)
    assert g.get(13) == 13
    assert g.get(14) == 12
    assert g.get(15) == 11
    assert g.get(16) == 10
    assert g.get(17) == 10
コード例 #31
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_life():
    with t(0):
        life = Gauge(100, 100)
        life.add_momentum(-1)
        assert life.get() == 100
    with t(1):
        assert life.get() == 99
    with t(2):
        assert life.get() == 98
    with t(10):
        assert life.get() == 90
        life.incr(1)
        assert life.get() == 91
    with t(11):
        assert life.get() == 90
コード例 #32
0
def test_life():
    with t(0):
        life = Gauge(100, 100)
        life.add_momentum(-1)
        assert life.get() == 100
    with t(1):
        assert life.get() == 99
    with t(2):
        assert life.get() == 98
    with t(10):
        assert life.get() == 90
        life.incr(1)
        assert life.get() == 91
    with t(11):
        assert life.get() == 90
コード例 #33
0
def test_forget_past_before_base_time():
    g = Gauge(0, 100, at=100)
    g.add_momentum(+1)
    assert g.get(100) == 0
    assert g.get(150) == 50
    assert g.get(200) == 100

    with pytest.raises(ValueError):
        g.forget_past(at=50)
    assert g.get(100) == 0
    assert g.get(150) == 50
    assert g.get(200) == 100

    g.forget_past(at=150)
    assert g.get(100) == 50
    assert g.get(150) == 50
    assert g.get(200) == 100

    with pytest.raises(ValueError):
        g.forget_past(0, at=100)
    assert g.get(100) == 50
    assert g.get(150) == 50
    assert g.get(200) == 100
コード例 #34
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_forget_past_before_base_time():
    g = Gauge(0, 100, at=100)
    g.add_momentum(+1)
    assert g.get(100) == 0
    assert g.get(150) == 50
    assert g.get(200) == 100

    with pytest.raises(ValueError):
        g.forget_past(at=50)
    assert g.get(100) == 0
    assert g.get(150) == 50
    assert g.get(200) == 100

    g.forget_past(at=150)
    assert g.get(100) == 50
    assert g.get(150) == 50
    assert g.get(200) == 100

    with pytest.raises(ValueError):
        g.forget_past(0, at=100)
    assert g.get(100) == 50
    assert g.get(150) == 50
    assert g.get(200) == 100
コード例 #35
0
def test_no_momentum():
    g = Gauge(1, 10, at=0)
    assert g.determination == [(0, 1)]
    assert g.get() == 1
コード例 #36
0
def test_invalidate_returns():
    g = Gauge(0, 100, at=0)
    assert not g.invalidate()
    g.get(0)
    assert g.invalidate()
    assert not g.invalidate()
コード例 #37
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_invalidate_returns():
    g = Gauge(0, 100, at=0)
    assert not g.invalidate()
    g.get(0)
    assert g.invalidate()
    assert not g.invalidate()
コード例 #38
0
def test_case5():
    g = Gauge(1, 1, 0, at=0)
    for x in range(11):
        g.add_momentum(-0.1, since=x, until=x + 1)
    assert g.get(11) == 0  # adjusted by min=0
コード例 #39
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_case5():
    g = Gauge(1, 1, 0, at=0)
    for x in range(11):
        g.add_momentum(-0.1, since=x, until=x + 1)
    assert g.get(11) == 0  # adjusted by min=0
コード例 #40
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_no_momentum():
    g = Gauge(1, 10, at=0)
    assert g.determination == [(0, 1)]
    assert g.get() == 1
コード例 #41
0
ファイル: gaugetest.py プロジェクト: what-studio/gauge
def test_hypergauge_past_bugs(zigzag, bidir):
    """Regression testing for hyper-gauge."""
    # just one momentum
    g1 = Gauge(5, Gauge(5, 10, at=0), Gauge(5, 10, at=0), at=0)
    g1.max_gauge.add_momentum(+1)
    g1.min_gauge.add_momentum(-1)
    assert g1.determination == [(0, 5)]
    g1.add_momentum(+0.1, until=100)
    assert g1.determination == [(0, 5), (50, 10), (100, 10)]
    # floating-point inaccuracy problem 1
    g1 = Gauge(3, bidir, zigzag, at=0)
    g1.add_momentum(+6, since=0, until=1)
    g1.add_momentum(-6, since=1, until=2)
    g1.add_momentum(+6, since=2, until=3)
    g1.add_momentum(-6, since=3, until=4)
    g1.add_momentum(+6, since=4, until=5)
    g1.add_momentum(-6, since=5, until=6)
    g1.add_momentum(+6, since=6, until=7)
    g1.add_momentum(-6, since=7, until=8)
    g1.add_momentum(+6, since=8, until=9)
    g1.add_momentum(-6, since=9, until=10)
    g1.add_momentum(+6, since=10, until=11)
    g1.add_momentum(-6, since=11, until=12)
    assert round_determination(g1.determination, precision=2) == [
        (0, 3), (0.4, 5.4), (1, 6), (1.8, 1.2), (2, 1), (3, 7), (3.8, 2.2),
        (4, 2), (4.57, 5.43), (5, 5), (5.71, 0.71), (6, 1), (6.8, 5.8), (7, 6),
        (7.6, 2.4), (8, 2), (8.83, 7), (9, 7), (9.8, 2.2), (10, 2),
        (10.57, 5.43), (11, 5), (11.71, 0.71), (12, 1)]
    # float problem 2
    g2 = Gauge(0, Gauge(1, 1, at=0), at=0)
    for x in range(10):
        g2.add_momentum(+0.1, since=x, until=x + 1)
    g2.max_gauge.add_momentum(-0.1, since=0, until=6)
    g2.max_gauge.add_momentum(+0.5, since=6, until=10)
    assert round(g2.get(5), 1) == 0.5
    assert round(g2.get(6), 1) == 0.4
    assert round(g2.get(7), 1) == 0.5
    assert round(g2.get(8), 1) == 0.6
    assert round(g2.get(9), 1) == 0.7
    assert round(g2.get(10), 1) == 0.8
    # float problem 3
    g3_max_max = Gauge(3, bidir, zigzag, at=0)
    g3_max_max.add_momentum(+6, since=0, until=1)
    g3_max_max.add_momentum(-6, since=1, until=2)
    g3_max_max.add_momentum(+6, since=2, until=3)
    g3_max_max.add_momentum(-6, since=3, until=4)
    g3_max_max.add_momentum(+6, since=4, until=5)
    g3_max_max.add_momentum(-6, since=5, until=6)
    g3_max_max.add_momentum(+6, since=6, until=7)
    g3_max_max.add_momentum(-6, since=7, until=8)
    g3_max_max.add_momentum(+6, since=8, until=9)
    g3_max_max.add_momentum(-6, since=9, until=10)
    g3_max_max.add_momentum(+6, since=10, until=11)
    g3_max_max.add_momentum(-6, since=11, until=12)
    g3_max = Gauge(0, g3_max_max, at=0)
    for x in range(10):
        g3_max.add_momentum(+0.1, since=x)
    r = random.Random(10)
    g3 = Gauge(0, shift_gauge(zigzag, +3), g3_max, at=0)
    for x in range(10):
        g3.add_momentum(r.uniform(-10, 10), since=x, until=x + 1)
    assert round(g3.get(9), 1) == 2.9  # not 2.4133871928
    # bound at first
    g4 = Gauge(0, 10, Gauge(0, 10, at=1), at=0)
    g4.min_gauge.add_momentum(+1, until=11)
    g4.add_momentum(-1, until=10)
    assert g4.get(10) == 9  # not -10
    assert g4.determination == [(0, 0), (1, 0), (10, 9), (11, 10)]
    # floor is dense than ceil
    r = random.Random(2810856076715324514)
    g5 = Gauge(0, shift_gauge(zigzag, +3), g3, at=0)
    for x in range(4):
        g5.add_momentum(r.uniform(-10, 10), since=x, until=x + 1)
    assert round(g5.get(4), 1) == 5.0  # not 11.8
コード例 #42
0
def test_hypergauge_past_bugs(zigzag, bidir):
    """Regression testing for hyper-gauge."""
    # just one momentum
    g1 = Gauge(5, Gauge(5, 10, at=0), Gauge(5, 10, at=0), at=0)
    g1.max_gauge.add_momentum(+1)
    g1.min_gauge.add_momentum(-1)
    assert g1.determination == [(0, 5)]
    g1.add_momentum(+0.1, until=100)
    assert g1.determination == [(0, 5), (50, 10), (100, 10)]
    # floating-point inaccuracy problem 1
    g1 = Gauge(3, bidir, zigzag, at=0)
    g1.add_momentum(+6, since=0, until=1)
    g1.add_momentum(-6, since=1, until=2)
    g1.add_momentum(+6, since=2, until=3)
    g1.add_momentum(-6, since=3, until=4)
    g1.add_momentum(+6, since=4, until=5)
    g1.add_momentum(-6, since=5, until=6)
    g1.add_momentum(+6, since=6, until=7)
    g1.add_momentum(-6, since=7, until=8)
    g1.add_momentum(+6, since=8, until=9)
    g1.add_momentum(-6, since=9, until=10)
    g1.add_momentum(+6, since=10, until=11)
    g1.add_momentum(-6, since=11, until=12)
    assert round_determination(g1.determination, precision=2) == [
        (0, 3), (0.4, 5.4), (1, 6), (1.8, 1.2), (2, 1), (3, 7), (3.8, 2.2),
        (4, 2), (4.57, 5.43), (5, 5), (5.71, 0.71), (6, 1), (6.8, 5.8), (7, 6),
        (7.6, 2.4), (8, 2), (8.83, 7), (9, 7), (9.8, 2.2), (10, 2),
        (10.57, 5.43), (11, 5), (11.71, 0.71), (12, 1)
    ]
    # float problem 2
    g2 = Gauge(0, Gauge(1, 1, at=0), at=0)
    for x in range(10):
        g2.add_momentum(+0.1, since=x, until=x + 1)
    g2.max_gauge.add_momentum(-0.1, since=0, until=6)
    g2.max_gauge.add_momentum(+0.5, since=6, until=10)
    assert round(g2.get(5), 1) == 0.5
    assert round(g2.get(6), 1) == 0.4
    assert round(g2.get(7), 1) == 0.5
    assert round(g2.get(8), 1) == 0.6
    assert round(g2.get(9), 1) == 0.7
    assert round(g2.get(10), 1) == 0.8
    # float problem 3
    g3_max_max = Gauge(3, bidir, zigzag, at=0)
    g3_max_max.add_momentum(+6, since=0, until=1)
    g3_max_max.add_momentum(-6, since=1, until=2)
    g3_max_max.add_momentum(+6, since=2, until=3)
    g3_max_max.add_momentum(-6, since=3, until=4)
    g3_max_max.add_momentum(+6, since=4, until=5)
    g3_max_max.add_momentum(-6, since=5, until=6)
    g3_max_max.add_momentum(+6, since=6, until=7)
    g3_max_max.add_momentum(-6, since=7, until=8)
    g3_max_max.add_momentum(+6, since=8, until=9)
    g3_max_max.add_momentum(-6, since=9, until=10)
    g3_max_max.add_momentum(+6, since=10, until=11)
    g3_max_max.add_momentum(-6, since=11, until=12)
    g3_max = Gauge(0, g3_max_max, at=0)
    for x in range(10):
        g3_max.add_momentum(+0.1, since=x)
    r = random.Random(10)
    g3 = Gauge(0, shift_gauge(zigzag, +3), g3_max, at=0)
    for x in range(10):
        g3.add_momentum(r.uniform(-10, 10), since=x, until=x + 1)
    assert round(g3.get(9), 1) == 2.9  # not 2.4133871928
    # bound at first
    g4 = Gauge(0, 10, Gauge(0, 10, at=1), at=0)
    g4.min_gauge.add_momentum(+1, until=11)
    g4.add_momentum(-1, until=10)
    assert g4.get(10) == 9  # not -10
    assert g4.determination == [(0, 0), (1, 0), (10, 9), (11, 10)]
    # floor is dense than ceil
    r = random.Random(2810856076715324514)
    g5 = Gauge(0, shift_gauge(zigzag, +3), g3, at=0)
    for x in range(4):
        g5.add_momentum(r.uniform(-10, 10), since=x, until=x + 1)
    assert round(g5.get(4), 1) == 5.0  # not 11.8