From c90cc88da76cefbc30897042ec88eff5cf0d6264 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 29 Jan 2025 16:16:35 +0000 Subject: [PATCH] Add fibers-promise-result-available? --- knots/promise.scm | 8 +++++++- tests/promise.scm | 10 +++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/knots/promise.scm b/knots/promise.scm index 3eb0a81..235640b 100644 --- a/knots/promise.scm +++ b/knots/promise.scm @@ -24,7 +24,8 @@ #:use-module (fibers conditions) #:export (fibers-delay fibers-force - fibers-promise-reset)) + fibers-promise-reset + fibers-promise-result-available?)) (define-record-type (make-fibers-promise thunk values-box evaluated-condition) @@ -76,3 +77,8 @@ (define (fibers-promise-reset fp) (atomic-box-set! (fibers-promise-values-box fp) #f)) + +(define (fibers-promise-result-available? fp) + (let ((val (atomic-box-ref (fibers-promise-values-box fp)))) + (not (or (eq? val #f) + (eq? val 'started))))) diff --git a/tests/promise.scm b/tests/promise.scm index b7dec73..1c0e235 100644 --- a/tests/promise.scm +++ b/tests/promise.scm @@ -13,8 +13,16 @@ (* i 2)))) (iota 10)))) + (assert-equal + #f + (fibers-promise-result-available? (car promises))) + (assert-equal 90 - (apply + (fibers-map fibers-force promises)))))) + (apply + (fibers-map fibers-force promises))) + + (assert-equal + #t + (fibers-promise-result-available? (car promises)))))) (display "promise test finished successfully\n")