Files
cpl/unittests/unittests_query/performance_test_case.py
edraft 25b4ca0696
Some checks failed
Build on push / prepare (push) Successful in 9s
Build on push / core (push) Successful in 18s
Build on push / query (push) Successful in 25s
Build on push / translation (push) Failing after 8s
Build on push / mail (push) Successful in 14s
Added cpl-mail
2025-09-15 20:56:07 +02:00

71 lines
2.3 KiB
Python

import sys
import timeit
import unittest
from cpl.query.enumerable import Enumerable
from cpl.query.iterable import Iterable
VALUES = 10000
COUNT = 50
class PerformanceTestCase(unittest.TestCase):
def setUp(self):
i = 0
self.values = []
while i < VALUES:
self.values.append(i)
i += 1
def test_range(self):
default = timeit.timeit(lambda: list(range(0, VALUES)), number=COUNT)
iterable = timeit.timeit(lambda: Iterable.range(0, VALUES), number=COUNT)
enumerable = timeit.timeit(lambda: Enumerable.range(0, VALUES), number=COUNT)
print("Range")
print(f"d: {default}s")
print(f"i: {iterable}s")
print(f"e: {enumerable}s")
self.assertAlmostEqual(round(default, 3), round(enumerable, 3))
self.assertAlmostEqual(round(default, 3), round(iterable, 3))
def test_where_single(self):
default = timeit.timeit(lambda: [x for x in list(range(0, VALUES)) if x == 50], number=COUNT)
iterable = timeit.timeit(lambda: Iterable.range(0, VALUES).where(lambda x: x == 50).single(), number=COUNT)
enumerable = timeit.timeit(lambda: Enumerable.range(0, VALUES).where(lambda x: x == 50).single(), number=COUNT)
print("Where single")
print(f"d: {default}s")
print(f"i: {iterable}s")
print(f"e: {enumerable}s")
self.assertLess(default, enumerable)
self.assertLess(default, iterable)
def test_where_single_complex(self):
class TestModel:
def __init__(self, v, tm=None):
self.value = v
self.tm = tm
values = []
for i in range(VALUES):
values.append(TestModel(i, TestModel(i + 1)))
default = timeit.timeit(lambda: [x for x in values if x.tm.value == 50], number=COUNT)
iterable = timeit.timeit(
lambda: Iterable(TestModel, values).where(lambda x: x.tm.value == 50).single(), number=COUNT
)
enumerable = timeit.timeit(
lambda: Enumerable(TestModel, values).where(lambda x: x.tm.value == 50).single(), number=COUNT
)
print("Complex where single")
print(f"d: {default}s")
print(f"i: {iterable}s")
print(f"e: {enumerable}s")
self.assertLess(default, enumerable)
self.assertLess(default, iterable)