summaryrefslogtreecommitdiffstats
path: root/tests/duration
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-01-05 10:38:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-01-05 10:39:17 +0000
commitd6d80a17444c90259c5bfdacb84c61e6bfece655 (patch)
tree157bff98bd572acf0b64cd5d478b0bdac87a37ae /tests/duration
parentReleasing debian version 2.1.2-4. (diff)
downloadpendulum-d6d80a17444c90259c5bfdacb84c61e6bfece655.tar.xz
pendulum-d6d80a17444c90259c5bfdacb84c61e6bfece655.zip
Merging upstream version 3.0.0~a1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/duration')
-rw-r--r--tests/duration/__init__.py0
-rw-r--r--tests/duration/test_add_sub.py54
-rw-r--r--tests/duration/test_arithmetic.py85
-rw-r--r--tests/duration/test_behavior.py21
-rw-r--r--tests/duration/test_construct.py99
-rw-r--r--tests/duration/test_in_methods.py28
-rw-r--r--tests/duration/test_in_words.py77
-rw-r--r--tests/duration/test_total_methods.py28
8 files changed, 392 insertions, 0 deletions
diff --git a/tests/duration/__init__.py b/tests/duration/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/duration/__init__.py
diff --git a/tests/duration/test_add_sub.py b/tests/duration/test_add_sub.py
new file mode 100644
index 0000000..193a493
--- /dev/null
+++ b/tests/duration/test_add_sub.py
@@ -0,0 +1,54 @@
+from __future__ import annotations
+
+from datetime import timedelta
+
+import pendulum
+
+from tests.conftest import assert_duration
+
+
+def test_add_interval():
+ p1 = pendulum.duration(days=23, seconds=32)
+ p2 = pendulum.duration(days=12, seconds=30)
+
+ p = p1 + p2
+ assert_duration(p, 0, 0, 5, 0, 0, 1, 2)
+
+
+def test_add_timedelta():
+ p1 = pendulum.duration(days=23, seconds=32)
+ p2 = timedelta(days=12, seconds=30)
+
+ p = p1 + p2
+ assert_duration(p, 0, 0, 5, 0, 0, 1, 2)
+
+
+def test_add_unsupported():
+ p = pendulum.duration(days=23, seconds=32)
+ assert NotImplemented == p.__add__(5)
+
+
+def test_sub_interval():
+ p1 = pendulum.duration(days=23, seconds=32)
+ p2 = pendulum.duration(days=12, seconds=28)
+
+ p = p1 - p2
+ assert_duration(p, 0, 0, 1, 4, 0, 0, 4)
+
+
+def test_sub_timedelta():
+ p1 = pendulum.duration(days=23, seconds=32)
+ p2 = timedelta(days=12, seconds=28)
+
+ p = p1 - p2
+ assert_duration(p, 0, 0, 1, 4, 0, 0, 4)
+
+
+def test_sub_unsupported():
+ p = pendulum.duration(days=23, seconds=32)
+ assert NotImplemented == p.__sub__(5)
+
+
+def test_neg():
+ p = pendulum.duration(days=23, seconds=32)
+ assert_duration(-p, 0, 0, -3, -2, 0, 0, -32)
diff --git a/tests/duration/test_arithmetic.py b/tests/duration/test_arithmetic.py
new file mode 100644
index 0000000..cba4d39
--- /dev/null
+++ b/tests/duration/test_arithmetic.py
@@ -0,0 +1,85 @@
+from __future__ import annotations
+
+import pendulum
+
+from tests.conftest import assert_duration
+
+
+def test_multiply():
+ it = pendulum.duration(days=6, seconds=34, microseconds=522222)
+ mul = it * 2
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 1, 5, 0, 1, 9, 44444)
+
+ it = pendulum.duration(days=6, seconds=34, microseconds=522222)
+ mul = 2 * it
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 1, 5, 0, 1, 9, 44444)
+
+ it = pendulum.duration(
+ years=2, months=3, weeks=4, days=6, seconds=34, microseconds=522222
+ )
+ mul = 2 * it
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 4, 6, 9, 5, 0, 1, 9, 44444)
+
+
+def test_divide():
+ it = pendulum.duration(days=2, seconds=34, microseconds=522222)
+ mul = it / 2
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 0, 1, 0, 0, 17, 261111)
+
+ it = pendulum.duration(days=2, seconds=35, microseconds=522222)
+ mul = it / 2
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 0, 1, 0, 0, 17, 761111)
+
+ it = pendulum.duration(days=2, seconds=35, microseconds=522222)
+ mul = it / 1.1
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 0, 1, 19, 38, 43, 202020)
+
+ it = pendulum.duration(years=2, months=4, days=2, seconds=35, microseconds=522222)
+ mul = it / 2
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 1, 2, 0, 1, 0, 0, 17, 761111)
+
+ it = pendulum.duration(years=2, months=4, days=2, seconds=35, microseconds=522222)
+ mul = it / 2.0
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 1, 2, 0, 1, 0, 0, 17, 761111)
+
+
+def test_floor_divide():
+ it = pendulum.duration(days=2, seconds=34, microseconds=522222)
+ mul = it // 2
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 0, 1, 0, 0, 17, 261111)
+
+ it = pendulum.duration(days=2, seconds=35, microseconds=522222)
+ mul = it // 3
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 0, 0, 0, 16, 0, 11, 840740)
+
+ it = pendulum.duration(years=2, months=4, days=2, seconds=34, microseconds=522222)
+ mul = it // 2
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 1, 2, 0, 1, 0, 0, 17, 261111)
+
+ it = pendulum.duration(years=2, months=4, days=2, seconds=35, microseconds=522222)
+ mul = it // 3
+
+ assert isinstance(mul, pendulum.Duration)
+ assert_duration(mul, 0, 1, 0, 0, 16, 0, 11, 840740)
diff --git a/tests/duration/test_behavior.py b/tests/duration/test_behavior.py
new file mode 100644
index 0000000..a97bbde
--- /dev/null
+++ b/tests/duration/test_behavior.py
@@ -0,0 +1,21 @@
+from __future__ import annotations
+
+import pickle
+
+from datetime import timedelta
+
+import pendulum
+
+
+def test_pickle():
+ it = pendulum.duration(days=3, seconds=2456, microseconds=123456)
+ s = pickle.dumps(it)
+ it2 = pickle.loads(s)
+
+ assert it == it2
+
+
+def test_comparison_to_timedelta():
+ duration = pendulum.duration(days=3)
+
+ assert duration < timedelta(days=4)
diff --git a/tests/duration/test_construct.py b/tests/duration/test_construct.py
new file mode 100644
index 0000000..aaa5390
--- /dev/null
+++ b/tests/duration/test_construct.py
@@ -0,0 +1,99 @@
+from __future__ import annotations
+
+from datetime import timedelta
+
+import pytest
+
+import pendulum
+
+from pendulum.duration import AbsoluteDuration
+from tests.conftest import assert_duration
+
+
+def test_defaults():
+ pi = pendulum.duration()
+ assert_duration(pi, 0, 0, 0, 0, 0, 0, 0)
+
+
+def test_years():
+ pi = pendulum.duration(years=2)
+ assert_duration(pi, years=2, weeks=0)
+ assert pi.days == 730
+ assert pi.total_seconds() == 63072000
+
+
+def test_months():
+ pi = pendulum.duration(months=3)
+ assert_duration(pi, months=3, weeks=0)
+ assert pi.days == 90
+ assert pi.total_seconds() == 7776000
+
+
+def test_weeks():
+ pi = pendulum.duration(days=365)
+ assert_duration(pi, weeks=52)
+
+ pi = pendulum.duration(days=13)
+ assert_duration(pi, weeks=1)
+
+
+def test_days():
+ pi = pendulum.duration(days=6)
+ assert_duration(pi, 0, 0, 0, 6, 0, 0, 0)
+
+ pi = pendulum.duration(days=16)
+ assert_duration(pi, 0, 0, 2, 2, 0, 0, 0)
+
+
+def test_hours():
+ pi = pendulum.duration(seconds=3600 * 3)
+ assert_duration(pi, 0, 0, 0, 0, 3, 0, 0)
+
+
+def test_minutes():
+ pi = pendulum.duration(seconds=60 * 3)
+ assert_duration(pi, 0, 0, 0, 0, 0, 3, 0)
+
+ pi = pendulum.duration(seconds=60 * 3 + 12)
+ assert_duration(pi, 0, 0, 0, 0, 0, 3, 12)
+
+
+def test_all():
+ pi = pendulum.duration(
+ years=2, months=3, days=1177, seconds=7284, microseconds=1000000
+ )
+ assert_duration(pi, 2, 3, 168, 1, 2, 1, 25)
+ assert pi.days == 1997
+ assert pi.seconds == 7285
+
+
+def test_absolute_interval():
+ pi = AbsoluteDuration(days=-1177, seconds=-7284, microseconds=-1000001)
+ assert_duration(pi, 0, 0, 168, 1, 2, 1, 25)
+ assert pi.microseconds == 1
+ assert pi.invert
+
+
+def test_invert():
+ pi = pendulum.duration(days=1177, seconds=7284, microseconds=1000000)
+ assert not pi.invert
+
+ pi = pendulum.duration(days=-1177, seconds=-7284, microseconds=-1000000)
+ assert pi.invert
+
+
+def test_as_timedelta():
+ pi = pendulum.duration(seconds=3456.123456)
+ assert_duration(pi, 0, 0, 0, 0, 0, 57, 36, 123456)
+ delta = pi.as_timedelta()
+ assert isinstance(delta, timedelta)
+ assert delta.total_seconds() == 3456.123456
+ assert delta.seconds == 3456
+
+
+def test_float_years_and_months():
+ with pytest.raises(ValueError):
+ pendulum.duration(years=1.5)
+
+ with pytest.raises(ValueError):
+ pendulum.duration(months=1.5)
diff --git a/tests/duration/test_in_methods.py b/tests/duration/test_in_methods.py
new file mode 100644
index 0000000..4527257
--- /dev/null
+++ b/tests/duration/test_in_methods.py
@@ -0,0 +1,28 @@
+from __future__ import annotations
+
+import pendulum
+
+
+def test_in_weeks():
+ it = pendulum.duration(days=17)
+ assert it.in_weeks() == 2
+
+
+def test_in_days():
+ it = pendulum.duration(days=3)
+ assert it.in_days() == 3
+
+
+def test_in_hours():
+ it = pendulum.duration(days=3, minutes=72)
+ assert it.in_hours() == 73
+
+
+def test_in_minutes():
+ it = pendulum.duration(minutes=6, seconds=72)
+ assert it.in_minutes() == 7
+
+
+def test_in_seconds():
+ it = pendulum.duration(seconds=72)
+ assert it.in_seconds() == 72
diff --git a/tests/duration/test_in_words.py b/tests/duration/test_in_words.py
new file mode 100644
index 0000000..c0a1a1f
--- /dev/null
+++ b/tests/duration/test_in_words.py
@@ -0,0 +1,77 @@
+from __future__ import annotations
+
+import pendulum
+
+
+def test_week():
+ assert pendulum.duration(days=364).in_words() == "52 weeks"
+ assert pendulum.duration(days=7).in_words() == "1 week"
+
+
+def test_week_to_string():
+ assert str(pendulum.duration(days=364)) == "52 weeks"
+ assert str(pendulum.duration(days=7)) == "1 week"
+
+
+def test_weeks_and_day():
+ assert pendulum.duration(days=365).in_words() == "52 weeks 1 day"
+
+
+def test_all():
+ pi = pendulum.duration(
+ years=2, months=3, days=1177, seconds=7284, microseconds=1000000
+ )
+
+ expected = "2 years 3 months 168 weeks 1 day 2 hours 1 minute 25 seconds"
+ assert pi.in_words() == expected
+
+
+def test_in_french():
+ pi = pendulum.duration(
+ years=2, months=3, days=1177, seconds=7284, microseconds=1000000
+ )
+
+ expected = "2 ans 3 mois 168 semaines 1 jour 2 heures 1 minute 25 secondes"
+ assert pi.in_words(locale="fr") == expected
+
+
+def test_repr():
+ pi = pendulum.duration(
+ years=2, months=3, days=1177, seconds=7284, microseconds=1000000
+ )
+
+ expected = (
+ "Duration(years=2, months=3, weeks=168, days=1, hours=2, minutes=1, seconds=25)"
+ )
+ assert repr(pi) == expected
+
+
+def test_singular_negative_values():
+ pi = pendulum.duration(days=-1)
+
+ assert pi.in_words() == "-1 day"
+
+
+def test_separator():
+ pi = pendulum.duration(days=1177, seconds=7284, microseconds=1000000)
+
+ expected = "168 weeks, 1 day, 2 hours, 1 minute, 25 seconds"
+ assert pi.in_words(separator=", ") == expected
+
+
+def test_subseconds():
+ pi = pendulum.duration(microseconds=123456)
+
+ assert pi.in_words() == "0.12 second"
+
+
+def test_subseconds_with_seconds():
+ pi = pendulum.duration(seconds=12, microseconds=123456)
+
+ assert pi.in_words() == "12 seconds"
+
+
+def test_duration_with_all_zero_values():
+ pi = pendulum.duration()
+
+ assert pi.in_words() == "0 microseconds"
diff --git a/tests/duration/test_total_methods.py b/tests/duration/test_total_methods.py
new file mode 100644
index 0000000..aabcd6c
--- /dev/null
+++ b/tests/duration/test_total_methods.py
@@ -0,0 +1,28 @@
+from __future__ import annotations
+
+import pendulum
+
+
+def test_in_weeks():
+ it = pendulum.duration(days=17)
+ assert round(it.total_weeks(), 2) == 2.43
+
+
+def test_in_days():
+ it = pendulum.duration(days=3)
+ assert it.total_days() == 3
+
+
+def test_in_hours():
+ it = pendulum.duration(days=3, minutes=72)
+ assert it.total_hours() == 73.2
+
+
+def test_in_minutes():
+ it = pendulum.duration(minutes=6, seconds=72)
+ assert it.total_minutes() == 7.2
+
+
+def test_in_seconds():
+ it = pendulum.duration(seconds=72, microseconds=123456)
+ assert it.total_seconds() == 72.123456