@@ -147,26 +147,35 @@ final class WASITests: XCTestCase {
147
147
var pointer = start
148
148
let read = WASIAbi . Subscription. Union. fdRead ( . init( 0 ) )
149
149
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
151
154
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
152
157
WASIAbi . Subscription. writeToGuest ( at: & pointer, value: . init( userData: 1 , union: read) )
153
- XCTAssertEqual ( pointer. offset, 48 )
158
+ XCTAssertEqual ( pointer. offset, writeOffset )
154
159
WASIAbi . Subscription. writeToGuest ( at: & pointer, value: . init( userData: 2 , union: write) )
155
- XCTAssertEqual ( pointer. offset, 48 * 2 )
160
+ XCTAssertEqual ( pointer. offset, clockOffset )
156
161
WASIAbi . Subscription. writeToGuest ( at: & pointer, value: . init( userData: 3 , union: clock) )
157
- XCTAssertEqual ( pointer. offset, 48 * 3 )
162
+ XCTAssertEqual ( pointer. offset, eventOffset )
158
163
WASIAbi . Event. writeToGuest ( at: & pointer, value: event)
159
- XCTAssertEqual ( pointer. offset, 48 * 3 + 32 )
164
+ XCTAssertEqual ( pointer. offset, finalOffset )
160
165
161
166
// Test that reading back yields same result
162
167
pointer = start
163
168
XCTAssertEqual ( WASIAbi . Subscription. readFromGuest ( & pointer) , . init( userData: 1 , union: read) )
164
- XCTAssertEqual ( pointer. offset, 48 )
169
+ XCTAssertEqual ( pointer. offset, writeOffset )
165
170
XCTAssertEqual ( WASIAbi . Subscription. readFromGuest ( & pointer) , . init( userData: 2 , union: write) )
166
- XCTAssertEqual ( pointer. offset, 48 * 2 )
171
+ XCTAssertEqual ( pointer. offset, clockOffset )
167
172
XCTAssertEqual ( WASIAbi . Subscription. readFromGuest ( & pointer) , . init( userData: 3 , union: clock) )
168
- XCTAssertEqual ( pointer. offset, 48 * 3 )
173
+ XCTAssertEqual ( pointer. offset, eventOffset )
169
174
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) )
171
180
}
172
181
}
0 commit comments