1+ """Tests for batch processing functionality."""
2+
3+ import time
4+ import pytest
5+ from gradient ._utils import BatchProcessor
6+
7+
8+ class TestBatchProcessor :
9+ """Test batch processing functionality."""
10+
11+ def test_batch_processor_basic (self ):
12+ """Test basic batch processing."""
13+ processor = BatchProcessor (batch_size = 3 )
14+ processed_batches = []
15+
16+ def process_batch (batch ):
17+ processed_batches .append (batch )
18+ return f"processed { len (batch )} items"
19+
20+ processor .set_callback (process_batch )
21+
22+ # Add items
23+ processor .add ("item1" )
24+ processor .add ("item2" )
25+ assert processor .size () == 2
26+
27+ # Add third item to trigger auto-processing
28+ processor .add ("item3" )
29+ assert processor .size () == 0 # Should be cleared after processing
30+ assert len (processed_batches ) == 1
31+ assert processed_batches [0 ] == ["item1" , "item2" , "item3" ]
32+
33+ def test_batch_processor_timeout (self ):
34+ """Test batch processing with timeout."""
35+ processor = BatchProcessor (batch_size = 10 , timeout_seconds = 0.1 )
36+ processed_batches = []
37+
38+ def process_batch (batch ):
39+ processed_batches .append (batch )
40+
41+ processor .set_callback (process_batch )
42+
43+ # Add item and wait for timeout
44+ processor .add ("item1" )
45+ time .sleep (0.2 )
46+
47+ # Check timeout should process batch
48+ processor .check_timeout ()
49+ assert len (processed_batches ) == 1
50+ assert processed_batches [0 ] == ["item1" ]
51+
52+ def test_batch_processor_force_process (self ):
53+ """Test force processing of batch."""
54+ processor = BatchProcessor (batch_size = 10 )
55+ processed_batches = []
56+
57+ def process_batch (batch ):
58+ processed_batches .append (batch )
59+
60+ processor .set_callback (process_batch )
61+
62+ # Add items without reaching batch size
63+ processor .add ("item1" )
64+ processor .add ("item2" )
65+ assert processor .size () == 2
66+
67+ # Force process
68+ processor .force_process ()
69+ assert processor .size () == 0
70+ assert len (processed_batches ) == 1
71+ assert processed_batches [0 ] == ["item1" , "item2" ]
72+
73+ def test_batch_processor_multiple_batches (self ):
74+ """Test processing multiple batches."""
75+ processor = BatchProcessor (batch_size = 2 )
76+ processed_batches = []
77+
78+ def process_batch (batch ):
79+ processed_batches .append (batch )
80+
81+ processor .set_callback (process_batch )
82+
83+ # Add items to create multiple batches
84+ processor .add ("item1" )
85+ processor .add ("item2" ) # Triggers first batch
86+ processor .add ("item3" )
87+ processor .add ("item4" ) # Triggers second batch
88+
89+ assert len (processed_batches ) == 2
90+ assert processed_batches [0 ] == ["item1" , "item2" ]
91+ assert processed_batches [1 ] == ["item3" , "item4" ]
0 commit comments