@@ -44,4 +44,66 @@ class PhaseLockedVocoderTests: XCTestCase {
44
44
45
45
testMD5 ( audio)
46
46
}
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
+ }
47
109
}
0 commit comments