
PuduLangResilienceTest.pudu
Pudu43 lines2.5 KB
1/** @Test.Root.Suite — outcome helpers and failure descriptions */2module PuduLangResilienceTest34import Std.Io as Io5import Std.Test as Test6import PuduLangResilience as Resilience789fn main() -> Int {10 let failures: Array[Resilience.Failure[Str]] = [11 Resilience.Raised("disk"), Resilience.TimedOut(30), Resilience.BrokenCircuit(5), Resilience.IsolatedCircuit,12 Resilience.RateLimited(Some(9)), Resilience.RateLimited(None), Resilience.Cancelled("stop"), Resilience.Crashed("boom")13 ]14 let succeeded: Resilience.Outcome[Int, Str] = Resilience.succeed(4)15 let lost: Resilience.Outcome[Int, Str] = Resilience.raise("x")16 let checks = Test.suite("Resilience", &[17 Test.equals("succeed holds the value", &succeeded, &Ok(4)),18 Test.equals("raise holds the callback's error", &Resilience.raise("bad"), &Err(Resilience.Raised("bad"))),19 Test.equals("lift keeps a value", &Resilience.lift(Ok(2)), &Ok(2)),20 Test.equals("lift raises an error", &Resilience.lift(Err("e")), &Err(Resilience.Raised("e"))),21 Test.equals("raised answers only the callback's error", &failures.map(|found: Resilience.Failure[Str]| Resilience.raised(&found)), &[Some("disk"), None, None, None, None, None, None, None]),22 Test.equals("only cancellation is a cancellation", &failures.map(|found: Resilience.Failure[Str]| Resilience.isCancellation(&found)), &[false, false, false, false, false, false, true, false]),23 Test.equals("rejections are the strategies' refusals", &failures.map(|found: Resilience.Failure[Str]| Resilience.isRejection(&found)), &[false, true, true, true, true, true, false, false]),24 Test.equals("every failure is described", &failures.map(|found: Resilience.Failure[Str]| Resilience.describe(&found)), &[25 "The operation failed: \"disk\"",26 "The operation did not complete within 30 ms.",27 "The circuit is open; it may be tried again in 5 ms.",28 "The circuit is isolated and admits no execution.",29 "The rate limiter rejected the execution; retry after 9 ms.",30 "The rate limiter rejected the execution.",31 "The operation was cancelled: stop",32 "The operation stopped its thread: boom"33 ]),34 Test.equals("a value is summarized", &Resilience.summarize(&succeeded), &"Ok(4)"),35 Test.equals("a failure is summarized by its description", &Resilience.summarize(&lost), &"The operation failed: \"x\"")36 ])37 let ran = Test.run(&checks)38 for failure in Test.failuresOf(&ran) {39 let _reported = Io.writeErrorLine(failure)40 }41 Test.report(&ran)42}43