From b059fc3fc5403dab4c825cbfa00e2548af356304 Mon Sep 17 00:00:00 2001 From: Sami Suteria Date: Thu, 27 Jun 2024 23:44:58 -0700 Subject: [PATCH] add throwing support to WithRandomGenerator (#232) --- .../WithRandomNumberGenerator.swift | 6 ++-- .../WithRandomNumberGeneratorTests.swift | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Sources/Dependencies/DependencyValues/WithRandomNumberGenerator.swift b/Sources/Dependencies/DependencyValues/WithRandomNumberGenerator.swift index 0b9fa318..bc2c032e 100644 --- a/Sources/Dependencies/DependencyValues/WithRandomNumberGenerator.swift +++ b/Sources/Dependencies/DependencyValues/WithRandomNumberGenerator.swift @@ -71,7 +71,9 @@ public final class WithRandomNumberGenerator: @unchecked Sendable { self.generator = generator } - public func callAsFunction(_ work: (inout any RandomNumberGenerator & Sendable) -> R) -> R { - return work(&self.generator) + public func callAsFunction(_ work: (inout any RandomNumberGenerator & Sendable) throws -> R) + rethrows -> R + { + return try work(&self.generator) } } diff --git a/Tests/DependenciesTests/WithRandomNumberGeneratorTests.swift b/Tests/DependenciesTests/WithRandomNumberGeneratorTests.swift index 1d2d8e2a..6465c22d 100644 --- a/Tests/DependenciesTests/WithRandomNumberGeneratorTests.swift +++ b/Tests/DependenciesTests/WithRandomNumberGeneratorTests.swift @@ -22,6 +22,34 @@ final class WithRandomNumberGeneratorDependencyTests: XCTestCase { } } } + + struct ExpectedError: Error {} + + func testWithRandomNumberGeneratorThrowing() throws { + try XCTAssertThrowsError( + { + try withDependencies { + $0.withRandomNumberGenerator = .init(LCRNG(seed: 0)) + } operation: { + try self.withRandomNumberGenerator { generator -> Void in + // NB: Wasm has different behavior here. + #if os(WASI) + let sequence = [5, 6, 5, 4, 4] + #else + let sequence = [1, 3, 6, 3, 2] + #endif + for expected in sequence { + if expected == 6 { + throw ExpectedError() + } + XCTAssertEqual(.random(in: 1...6, using: &generator), expected) + } + + } + } + + }(), "Expected error should be thrown") + } } private struct LCRNG: RandomNumberGenerator {