Skip to content

Commit 18df813

Browse files
committed
test: add performance benchmarks for compression
- Test compression overhead is under 20ms threshold - Test at multiple content sizes (512, 1024, 5000, 10000 bytes) - Test compression ratio for realistic code content - Ensure performance requirements are met
1 parent 999c144 commit 18df813

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import time
2+
import pytest
3+
from app.utils.compression import compress_content, decompress_content
4+
5+
6+
class TestCompressionPerformance:
7+
"""Performance tests for compression functionality."""
8+
9+
@pytest.mark.parametrize("size", [512, 1024, 5000, 10000])
10+
def test_compression_performance_overhead(self, size):
11+
"""Test that compression overhead is under 20ms threshold."""
12+
# Create content of specified size
13+
content = "x" * size
14+
15+
# Measure compression time
16+
start_compress = time.perf_counter()
17+
compressed, original_size = compress_content(content)
18+
end_compress = time.perf_counter()
19+
compress_time_ms = (end_compress - start_compress) * 1000
20+
21+
# Measure decompression time
22+
start_decompress = time.perf_counter()
23+
decompressed = decompress_content(compressed)
24+
end_decompress = time.perf_counter()
25+
decompress_time_ms = (end_decompress - start_decompress) * 1000
26+
27+
# Calculate total overhead
28+
total_overhead_ms = compress_time_ms + decompress_time_ms
29+
30+
# Print results for visibility
31+
print(f"\nSize {size}: compress={compress_time_ms:.3f}ms, decompress={decompress_time_ms:.3f}ms, total={total_overhead_ms:.3f}ms")
32+
33+
# Verify decompression works
34+
assert decompressed == content
35+
36+
# Assert total overhead is under 20ms
37+
assert total_overhead_ms < 20, f"Compression overhead {total_overhead_ms:.3f}ms exceeds 20ms threshold"
38+
39+
def test_compression_ratio_realistic_code(self):
40+
"""Test compression ratio for realistic code content."""
41+
# Create realistic code content - Python function repeated 20 times
42+
code_snippet = """
43+
def calculate_fibonacci(n):
44+
'''Calculate the nth Fibonacci number.'''
45+
if n <= 1:
46+
return n
47+
a, b = 0, 1
48+
for _ in range(2, n + 1):
49+
a, b = b, a + b
50+
return b
51+
52+
class DataProcessor:
53+
def __init__(self, data):
54+
self.data = data
55+
self.processed = False
56+
57+
def process(self):
58+
'''Process the data.'''
59+
result = []
60+
for item in self.data:
61+
if isinstance(item, int):
62+
result.append(item * 2)
63+
else:
64+
result.append(str(item).upper())
65+
self.processed = True
66+
return result
67+
"""
68+
realistic_content = code_snippet * 20
69+
original_size = len(realistic_content)
70+
71+
# Compress the content
72+
compressed, _ = compress_content(realistic_content)
73+
compressed_size = len(compressed)
74+
75+
# Calculate compression ratio
76+
compression_ratio = compressed_size / original_size
77+
78+
# Print results
79+
print(f"\nOriginal size: {original_size} bytes")
80+
print(f"Compressed size: {compressed_size} bytes")
81+
print(f"Compression ratio: {compression_ratio:.3f}")
82+
83+
# Verify decompression works
84+
decompressed = decompress_content(compressed)
85+
assert decompressed == realistic_content
86+
87+
# Assert compression ratio is under 0.4 (40%)
88+
assert compression_ratio < 0.4, f"Compression ratio {compression_ratio:.3f} exceeds 0.4 threshold"

0 commit comments

Comments
 (0)