aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_utils.py
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-06-12 20:44:30 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-06-13 03:45:53 +0530
commit28419ca2c84de90acbfdb769d1a38440d93bd9c5 (patch)
tree64aaf446dedcc00feaa90c2cfaa5601e4fa00279 /test/test_utils.py
parent8ba87148802843c6502f7ffc48e574a2eb0049d2 (diff)
downloadhypervideo-pre-28419ca2c84de90acbfdb769d1a38440d93bd9c5.tar.lz
hypervideo-pre-28419ca2c84de90acbfdb769d1a38440d93bd9c5.tar.xz
hypervideo-pre-28419ca2c84de90acbfdb769d1a38440d93bd9c5.zip
[utils] Improve `LazyList`
* Add `repr` and `str` that mimics `list` * Add `reversed`. Unlike `[::-1]`, reversed does not exhaust the iterable and modifies the `LazyList` in-place * Add tests
Diffstat (limited to 'test/test_utils.py')
-rw-r--r--test/test_utils.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/test/test_utils.py b/test/test_utils.py
index 9ff13a369..ade10a7b1 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -12,6 +12,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Various small unit tests
import io
+import itertools
import json
import xml.etree.ElementTree
@@ -108,6 +109,7 @@ from yt_dlp.utils import (
cli_bool_option,
parse_codecs,
iri_to_uri,
+ LazyList,
)
from yt_dlp.compat import (
compat_chr,
@@ -1525,6 +1527,47 @@ Line 1
self.assertEqual(clean_podcast_url('https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW7835899191.mp3'), 'https://traffic.megaphone.fm/HSW7835899191.mp3')
self.assertEqual(clean_podcast_url('https://play.podtrac.com/npr-344098539/edge1.pod.npr.org/anon.npr-podcasts/podcast/npr/waitwait/2020/10/20201003_waitwait_wwdtmpodcast201003-015621a5-f035-4eca-a9a1-7c118d90bc3c.mp3'), 'https://edge1.pod.npr.org/anon.npr-podcasts/podcast/npr/waitwait/2020/10/20201003_waitwait_wwdtmpodcast201003-015621a5-f035-4eca-a9a1-7c118d90bc3c.mp3')
+ def test_LazyList(self):
+ it = list(range(10))
+
+ self.assertEqual(list(LazyList(it)), it)
+ self.assertEqual(LazyList(it).exhaust(), it)
+ self.assertEqual(LazyList(it)[5], it[5])
+
+ self.assertEqual(LazyList(it)[::2], it[::2])
+ self.assertEqual(LazyList(it)[1::2], it[1::2])
+ self.assertEqual(LazyList(it)[6:2:-2], it[6:2:-2])
+ self.assertEqual(LazyList(it)[::-1], it[::-1])
+
+ self.assertTrue(LazyList(it))
+ self.assertFalse(LazyList(range(0)))
+ self.assertEqual(len(LazyList(it)), len(it))
+ self.assertEqual(repr(LazyList(it)), repr(it))
+ self.assertEqual(str(LazyList(it)), str(it))
+
+ self.assertEqual(list(reversed(LazyList(it))), it[::-1])
+ self.assertEqual(list(reversed(LazyList(it))[1:3:7]), it[::-1][1:3:7])
+
+ def test_LazyList_laziness(self):
+
+ def test(ll, idx, val, cache):
+ self.assertEqual(ll[idx], val)
+ self.assertEqual(getattr(ll, '_LazyList__cache'), list(cache))
+
+ ll = LazyList(range(10))
+ test(ll, 0, 0, range(1))
+ test(ll, 5, 5, range(6))
+ test(ll, -3, 7, range(10))
+
+ ll = reversed(LazyList(range(10)))
+ test(ll, -1, 0, range(1))
+ test(ll, 3, 6, range(10))
+
+ ll = LazyList(itertools.count())
+ test(ll, 10, 10, range(11))
+ reversed(ll)
+ test(ll, -15, 14, range(15))
+
if __name__ == '__main__':
unittest.main()