@@ -147,26 +147,35 @@ final class WASITests: XCTestCase {
147147 var pointer = start
148148 let read = WASIAbi . Subscription. Union. fdRead ( . init( 0 ) )
149149 let write = WASIAbi . Subscription. Union. fdWrite ( . init( 0 ) )
150- let clock = WASIAbi . Subscription. Union. clock ( . init( id: . REALTIME, timeout: 42 , precision: 0 , flags: [ ] ) )
150+ let writeOffset = WASIAbi . Subscription. sizeInGuest
151+ let timeout : WASIAbi . Timestamp = 100_000_000
152+ let clock = WASIAbi . Subscription. Union. clock ( . init( id: . REALTIME, timeout: timeout, precision: 0 , flags: [ ] ) )
153+ let clockOffset = writeOffset + WASIAbi. Subscription. sizeInGuest
151154 let event = WASIAbi . Event ( userData: 3 , error: . EIO, eventType: . fdRead, fdReadWrite: . init( nBytes: 37 , flags: [ . hangup] ) )
155+ let eventOffset = clockOffset + WASIAbi. Subscription. sizeInGuest
156+ let finalOffset = eventOffset + WASIAbi. Event. sizeInGuest
152157 WASIAbi . Subscription. writeToGuest ( at: & pointer, value: . init( userData: 1 , union: read) )
153- XCTAssertEqual ( pointer. offset, 48 )
158+ XCTAssertEqual ( pointer. offset, writeOffset )
154159 WASIAbi . Subscription. writeToGuest ( at: & pointer, value: . init( userData: 2 , union: write) )
155- XCTAssertEqual ( pointer. offset, 48 * 2 )
160+ XCTAssertEqual ( pointer. offset, clockOffset )
156161 WASIAbi . Subscription. writeToGuest ( at: & pointer, value: . init( userData: 3 , union: clock) )
157- XCTAssertEqual ( pointer. offset, 48 * 3 )
162+ XCTAssertEqual ( pointer. offset, eventOffset )
158163 WASIAbi . Event. writeToGuest ( at: & pointer, value: event)
159- XCTAssertEqual ( pointer. offset, 48 * 3 + 32 )
164+ XCTAssertEqual ( pointer. offset, finalOffset )
160165
161166 // Test that reading back yields same result
162167 pointer = start
163168 XCTAssertEqual ( WASIAbi . Subscription. readFromGuest ( & pointer) , . init( userData: 1 , union: read) )
164- XCTAssertEqual ( pointer. offset, 48 )
169+ XCTAssertEqual ( pointer. offset, writeOffset )
165170 XCTAssertEqual ( WASIAbi . Subscription. readFromGuest ( & pointer) , . init( userData: 2 , union: write) )
166- XCTAssertEqual ( pointer. offset, 48 * 2 )
171+ XCTAssertEqual ( pointer. offset, clockOffset )
167172 XCTAssertEqual ( WASIAbi . Subscription. readFromGuest ( & pointer) , . init( userData: 3 , union: clock) )
168- XCTAssertEqual ( pointer. offset, 48 * 3 )
173+ XCTAssertEqual ( pointer. offset, eventOffset )
169174 XCTAssertEqual ( WASIAbi . Event. readFromGuest ( & pointer) , event)
170- XCTAssertEqual ( pointer. offset, 48 * 3 + 32 )
175+ XCTAssertEqual ( pointer. offset, finalOffset)
176+ XCTAssertTrue ( try ContinuousClock ( ) . measure {
177+ let clockPointer = UnsafeGuestBufferPointer < WASIAbi . Subscription > ( baseAddress: . init( memorySpace: memory, offset: clockOffset) , count: 1 )
178+ XCTAssertEqual ( try WASIBridgeToHost ( ) . poll_oneoff ( subscriptions: clockPointer, events: . init( baseAddress: . init( memorySpace: memory, offset: finalOffset) , count: 1 ) ) , 1 )
179+ } > . nanoseconds( timeout) )
171180 }
172181}
0 commit comments