tests.pocketutils.tools.test_unit_tools   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 56
dl 0
loc 69
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A TestUnitTools.test_approx_time_wrt() 0 27 1
A TestUnitTools.test_delta_time_to_str() 0 8 1
A TestUnitTools.test_ms_to_minsec() 0 7 1
A TestUnitTools.test_round_to_sigfigs() 0 6 1
1
# SPDX-FileCopyrightText: Copyright 2020-2023, Contributors to pocketutils
2
# SPDX-PackageHomePage: https://github.com/dmyersturnbull/pocketutils
3
# SPDX-License-Identifier: Apache-2.0
4
from datetime import datetime
5
from typing import Self
6
7
import pytest
8
from pocketutils.core.chars import Chars
9
from pocketutils.tools.unit_tools import UnitTools
10
11
12
class TestUnitTools:
13
    def test_delta_time_to_str(self: Self) -> None:
14
        f = UnitTools.pretty_timedelta
15
        assert f(15) == "15s"
16
        assert f(313) == "5.22min"
17
        assert f(15, space=Chars.narrownbsp) == "15" + Chars.narrownbsp + "s"
18
        assert f(15 * 60) == "15min"
19
        assert f(15 * 60 + 5) == "15.08min"
20
        assert f(15 * 60 * 60 + 5 * 60) == "15.08hr"
21
22
    def test_approx_time_wrt(self: Self) -> None:
23
        f = UnitTools.approx_time_wrt
24
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 2)) == "2021-01-02 00:00"
25
        assert f(datetime(2021, 1, 1), datetime(1996, 1, 1)) == "1996"
26
        assert f(datetime(2021, 1, 1), datetime(2021, 5, 5)) == "2021-05"
27
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 5)) == "2021-01-05"
28
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 1, 6)) == "2021-01-01 06:00"
29
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 1, 6, 22)) == "2021-01-01 06:22"
30
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 2, 6, 22)) == "2021-01-02 06:22"
31
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 2, 2, 22)) == "2021-01-02 02:22"
32
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 2, 2, 22, 40)) == "2021-01-02 02:22"
33
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 1, 0, 1, 40)) == "2021-01-01 00:01:40"
34
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 1, 0, 0, 0, 222222)) == "2021-01-01 00:00:00.222"
35
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 1, 0, 0, 0, 222)) == "2021-01-01 00:00:00.000222"
36
        assert f(datetime(2021, 1, 1), datetime(2021, 1, 1, 0, 0, 0, 0)) == "2021-01-01 00:00:00.000000"
37
        assert f(datetime(2021, 1, 10), datetime(2021, 1, 5)) == "2021-01-05"  # negative delta
38
        assert f(datetime(2021, 9, 30, 23), datetime(2021, 10, 1)) == "2021-10-01 00:00"
39
        assert f(datetime(2021, 10, 1), datetime(2021, 9, 30, 23)) == "2021-09-30 23:00"
40
        assert f(datetime(2021, 9, 27, 1), datetime(2021, 10, 1)) == "2021-10-01"
41
        assert f(datetime(2021, 10, 1), datetime(2021, 9, 25)) == "2021-09-25"
42
        assert (
43
            f(
44
                datetime(2021, 1, 1),
45
                datetime(2021, 1, 1, 0, 0, 0, 0),
46
                no_date_if_today=True,
47
            )
48
            == "00:00:00.000000"
49
        )
50
51
    def test_ms_to_minsec(self: Self) -> None:
52
        f = UnitTools.milliseconds_to_min_sec
53
        assert f(15) == "15ms"
54
        assert f(15 * 1000) == "00:15"
55
        assert f(15 * 60 * 1000) == "15:00"
56
        assert f(15 * 60 * 60 * 1000) == "15:00:00"
57
        assert f(15 * 24 * 60 * 60 * 1000) == "15d:00:00:00"
58
59
    def test_round_to_sigfigs(self: Self) -> None:
60
        f = UnitTools.round_to_sigfigs
61
        assert str(f(0.0012, 3)) == "0.0012"
62
        assert str(f(0.0012, 1)) == "0.001"
63
        assert str(f(0.0012 / 1000 / 1000, 3)) == "1.2e-09"
64
        assert str(f(0.0012 / 1000 / 1000, 1)) == "1e-09"
65
66
67
if __name__ == "__main__":
68
    pytest.main()
69