From 7d3238ccc4fd44f3279fccc46ef64b74ab0f71e6 Mon Sep 17 00:00:00 2001 From: bd Date: Tue, 22 Jul 2025 02:37:17 -0600 Subject: Trial the addition of some yappi-aergia comparison tests --- t/test_functionality.py | 56 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 6 deletions(-) (limited to 't/test_functionality.py') diff --git a/t/test_functionality.py b/t/test_functionality.py index f0fa6ed..0302a90 100644 --- a/t/test_functionality.py +++ b/t/test_functionality.py @@ -1,7 +1,16 @@ +try: + import yappi +except ImportError: + print("yappi module not found. Skipping related tests.") + exit(0) import utils import asyncio import threading +# A test file containing basic async functionality tests. Compares the results +# of Aergia to both a calculated expected time and yappi reported time, done +# simply to draw comparisons between the two approaches. + class TerminateTaskGroup(Exception): '''Exception raised to terminate a task group.''' @@ -39,10 +48,15 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() - samples = self.Aergia.get_samples() + yappi_samples = yappi.get_func_stats() + aergia_samples = self.Aergia.get_samples() - self.assert_reasonable_delay('b', delay * num_times, samples) + self.assert_reasonable_delay('b', delay * num_times, aergia_samples) + self.assert_similar_delay('b', yappi_samples, aergia_samples) def test_simultaneous_tasks(self): delay = 0.2 @@ -52,15 +66,22 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() - samples = self.Aergia.get_samples() + yappi_samples = yappi.get_func_stats() + aergia_samples = self.Aergia.get_samples() - self.assert_reasonable_delay('b', delay * 3, samples) + self.assert_reasonable_delay('b', delay * 3, aergia_samples) # the gather function is technically waiting for all tasks to finish. # This might be seen as unintuitive though I don't want to bias the # results by adding logic to add artificial consistency. # profiling does not mean obscuring implementation details. - self.assert_reasonable_delay('a', delay, samples) + self.assert_reasonable_delay('a', delay, aergia_samples) + + self.assert_similar_delay('b', yappi_samples, aergia_samples) + self.assert_similar_delay('a', yappi_samples, aergia_samples) def test_subthread_task(self): delay = 0.2 @@ -74,6 +95,11 @@ class BasicUsage(utils.AergiaUnitTestCase): x.start() x.join() self.Aergia.stop() + yappi.start() + x = threading.Thread(target=c) + x.start() + x.join() + yappi.stop() samples = self.Aergia.get_samples() self.assert_reasonable_delay('c', 0, samples) @@ -91,6 +117,9 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() samples = self.Aergia.get_samples() self.assert_reasonable_delay('a', delay, samples) @@ -112,6 +141,9 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() samples = self.Aergia.get_samples() self.assert_reasonable_delay('a', d1 + d2 + d3 + d4, samples) @@ -180,6 +212,9 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() samples = self.Aergia.get_samples() @@ -205,6 +240,9 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() samples = self.Aergia.get_samples() @@ -242,6 +280,9 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a()) self.Aergia.stop() + yappi.start() + asyncio.run(a()) + yappi.stop() samples = self.Aergia.get_samples() @@ -265,5 +306,8 @@ class BasicUsage(utils.AergiaUnitTestCase): self.Aergia.start() asyncio.run(a(3)) self.Aergia.stop() + yappi.start() + asyncio.run(a(3)) + yappi.stop() - samples = self.Aergia.get_samples() + # samples = self.Aergia.get_samples() -- cgit v1.2.3