@@ -44,4 +44,66 @@ class PhaseLockedVocoderTests: XCTestCase {
4444
4545 testMD5 ( audio)
4646 }
47+
48+ func testReset( ) {
49+ let url = generateTestFile ( )
50+ XCTAssertNotNil ( url)
51+
52+ guard let file = try ? AVAudioFile ( forReading: url) else {
53+ XCTFail ( " Couldn't load test file " )
54+ return
55+ }
56+
57+ let engine = AudioEngine ( )
58+ let vocoder = PhaseLockedVocoder ( file: file)
59+ engine. output = vocoder
60+
61+ // Start the engine and render some audio
62+ let audio = engine. startTest ( totalDuration: 2.0 )
63+ vocoder. $position. ramp ( to: 0.5 , duration: 0.5 )
64+ audio. append ( engine. render ( duration: 1.0 ) )
65+
66+ // Get initial memory usage
67+ var info = mach_task_basic_info ( )
68+ var count = mach_msg_type_number_t ( MemoryLayout< mach_task_basic_info> . size) / 4
69+ var kerr : kern_return_t = withUnsafeMutablePointer ( to: & info) {
70+ $0. withMemoryRebound ( to: integer_t. self, capacity: 1 ) {
71+ task_info ( mach_task_self_,
72+ task_flavor_t ( MACH_TASK_BASIC_INFO) ,
73+ $0,
74+ & count)
75+ }
76+ }
77+ XCTAssertEqual ( kerr, KERN_SUCCESS)
78+ let initialMemory = info. resident_size
79+
80+ // Reset the vocoder multiple times to stress test memory management
81+ for _ in 0 ... 1000 {
82+ vocoder. reset ( )
83+ }
84+
85+ // Get final memory usage
86+ kerr = withUnsafeMutablePointer ( to: & info) {
87+ $0. withMemoryRebound ( to: integer_t. self, capacity: 1 ) {
88+ task_info ( mach_task_self_,
89+ task_flavor_t ( MACH_TASK_BASIC_INFO) ,
90+ $0,
91+ & count)
92+ }
93+ }
94+ XCTAssertEqual ( kerr, KERN_SUCCESS)
95+ let finalMemory = info. resident_size
96+
97+ // Calculate memory growth
98+ let memoryGrowth = finalMemory - initialMemory
99+ XCTAssertLessThan ( memoryGrowth, 1_000_000 , " Memory leak detected: Memory grew by \( memoryGrowth) bytes " )
100+
101+ // Continue rendering after reset
102+ vocoder. $position. ramp ( to: 0 , duration: 0.5 )
103+ audio. append ( engine. render ( duration: 1.0 ) )
104+
105+ engine. stop ( )
106+
107+ testMD5 ( audio)
108+ }
47109}
0 commit comments