...

Text file src/github.com/datawire/ambassador/v2/python/tests/unit/test_timer.py

Documentation: github.com/datawire/ambassador/v2/python/tests/unit

     1import sys
     2
     3import pytest
     4
     5from ambassador.utils import Timer
     6
     7epsilon = 0.0001
     8
     9
    10def feq(x: float, y: float) -> bool:
    11    return abs(x - y) <= epsilon
    12
    13
    14def test_Timer():
    15    t1 = Timer("test1")
    16    t2 = Timer("test2")
    17
    18    assert not t1.running, "t1 must not be running"
    19    assert not t2.running, "t2 must not be running"
    20
    21    t1.start(100)
    22    t2.start(100)
    23
    24    assert t1.running, "t1 must be running"
    25    assert feq(t1.starttime, 100), "t1.starttime must be 100, got {t1.starttime}"
    26    assert t1.cycles == 0
    27
    28    assert t2.running, "t2 must be running"
    29    assert t2.starttime == 100
    30    assert t2.cycles == 0
    31
    32    a2 = t2.stop(110)
    33    assert feq(a2, 10), f"t2.stop() must be 10, got {a2}"
    34    assert not t2.running, "t2 must not be running"
    35    assert feq(t2.starttime, 100), "t2.starttime must be 100, got {t2.starttime}"
    36    assert t2.cycles == 1
    37
    38    assert feq(t2.accumulated, 10), f"t2.accumulated must be 10, got {t2.accumulated}"
    39    assert feq(t2.minimum, 10), f"t2.minimum must be 10, got {t2.minimum}"
    40    assert feq(t2.maximum, 10), f"t2.maximum must be 10, got {t2.maximum}"
    41    assert feq(t2.average, 10), f"t2.average must be 10, got {t2.average}"
    42
    43    t2.start(120)
    44    assert t2.running, "t2 must be running"
    45    assert feq(t2.starttime, 120), "t2.starttime must be 120, got {t2.starttime}"
    46    assert t2.cycles == 1
    47
    48    a2 = t2.stop(140)
    49    assert feq(a2, 30), f"t2.stop() must be 30, got {a2}"
    50    assert not t2.running, "t2 must not be running"
    51    assert t2.starttime == 120
    52    assert t2.cycles == 2
    53
    54    assert feq(t2.accumulated, 30), f"t2.accumulated must be 30, got {t2.accumulated}"
    55    assert feq(t2.minimum, 10), f"t2.minimum must be 10, got {t2.minimum}"
    56    assert feq(t2.maximum, 20), f"t2.maximum must be 20, got {t2.maximum}"
    57    assert feq(t2.average, 15), f"t2.average must be 15, got {t2.average}"
    58
    59    with t2:
    60        assert t2.running, "t2 must be running"
    61        # Don't assert t2.starttime() here, since we can't have set it.
    62        assert t2.cycles == 2
    63
    64        t2.faketime(6)
    65
    66    assert feq(t2.accumulated, 36), f"t2.stop() must be 36, got {t2.accumulated}"
    67    assert not t2.running, "t2 must not be running"
    68    # Don't assert t2.starttime() here, since we can't have set it.
    69    assert t2.cycles == 3
    70
    71    assert feq(t2.accumulated, 36), f"t2.accumulated must be 36, got {t2.accumulated}"
    72    assert feq(t2.minimum, 6), f"t2.minimum must be 6, got {t2.minimum}"
    73    assert feq(t2.maximum, 20), f"t2.maximum must be 20, got {t2.maximum}"
    74    assert feq(t2.average, 12), f"t2.average must be 12, got {t2.average}"
    75
    76    a1 = t1.stop(300)
    77    assert feq(a1, 200), f"t1.stop() must be 200, got {a1}"
    78    assert not t1.running, "t1 must not be running"
    79    assert t1.starttime == 100
    80    assert t1.cycles == 1
    81
    82    assert feq(t1.accumulated, 200), f"t1.accumulated must be 200, got {t1.accumulated}"
    83    assert feq(t1.minimum, 200), f"t1.minimum must be 200, got {t1.minimum}"
    84    assert feq(t1.maximum, 200), f"t1.maximum must be 200, got {t1.maximum}"
    85    assert feq(t1.average, 200), f"t1.average must be 200, got {t1.average}"
    86
    87    # Test calling stop twice...
    88    a1 = t1.stop(300)
    89    assert feq(a1, 200), f"t1.stop() must be 200, got {a1}"
    90    assert not t1.running, "t1 must not be running"
    91    assert t1.starttime == 100
    92    assert t1.cycles == 1
    93
    94    assert feq(t1.accumulated, 200), f"t1.accumulated must be 200, got {t1.accumulated}"
    95    assert feq(t1.minimum, 200), f"t1.minimum must be 200, got {t1.minimum}"
    96    assert feq(t1.maximum, 200), f"t1.maximum must be 200, got {t1.maximum}"
    97    assert feq(t1.average, 200), f"t1.average must be 200, got {t1.average}"
    98
    99    # Test calling start twice...
   100    t1.start(400)
   101    assert t1.running, "t1 must be running"
   102    assert feq(t1.starttime, 400), "t1.starttime must be 400, got {t1.starttime}"
   103    assert t1.cycles == 1
   104
   105    t1.start(500)
   106    assert t1.running, "t1 must be running"
   107    assert feq(t1.starttime, 500), "t1.starttime must be 500, got {t1.starttime}"
   108    assert t1.cycles == 1
   109
   110    a1 = t1.stop(600)
   111    assert feq(a1, 300), f"t1.stop() must be 300, got {a1}"
   112    assert not t1.running, "t1 must not be running"
   113    assert t1.starttime == 500
   114    assert t1.cycles == 2
   115
   116    assert feq(t1.accumulated, 300), f"t1.accumulated must be 300, got {t1.accumulated}"
   117    assert feq(t1.minimum, 100), f"t1.minimum must be 200, got {t1.minimum}"
   118    assert feq(t1.maximum, 200), f"t1.maximum must be 300, got {t1.maximum}"
   119    assert feq(t1.average, 150), f"t1.average must be 150, got {t1.average}"
   120
   121
   122if __name__ == "__main__":
   123    pytest.main(sys.argv)

View as plain text