From 0d72c2b75118fd9f4c58c40e0de2fef9c75a909f Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 21 Aug 2023 15:56:42 -0700 Subject: [PATCH] hashcash: Avoid generating the stamp unless it is unset or set to ``f`` --- extra/hashcash/hashcash-tests.factor | 37 ++++++++++++++++++++-------- extra/hashcash/hashcash.factor | 5 ++-- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/extra/hashcash/hashcash-tests.factor b/extra/hashcash/hashcash-tests.factor index 0482a38747..d71c8acb0d 100644 --- a/extra/hashcash/hashcash-tests.factor +++ b/extra/hashcash/hashcash-tests.factor @@ -1,27 +1,36 @@ -! Copyright (C) 2022 Zoltán Kéri. +! Copyright (C) 2023 Zoltán Kéri. ! See https://factorcode.org/license.txt for BSD license. USING: accessors calendar hashcash hashcash.private kernel literals namespaces sequences splitting tools.test ; IN: hashcash.tests -! We do not want to generate it multiple times. It would be too slow. -CONSTANT: generated-mint $[ "foo@bar.com" mint ] +: generate-stamp ( -- stamp ) "foo@bar.com" mint ; -{ t } [ generated-mint dup ":" split third valid-date? swap drop ] unit-test +! Generate the stamp iff it does not exist. +! You can delete it with `generated-stamp global delete-at`. +INITIALIZED-SYMBOL: generated-stamp [ generate-stamp ] + +! Generate the stamp iff it is set to `f`. +! You can change it to `f` with `f generated-stamp set-global`. +generated-stamp get f eq? [ generate-stamp generated-stamp set ] when + +{ t } [ + generated-stamp get dup ":" split third valid-date? swap drop +] unit-test { f } [ [ -1 expiry-days set - generated-mint valid-stamp? + generated-stamp get valid-stamp? ] with-scope ] unit-test { t } [ [ 0 expiry-days set - generated-mint valid-stamp? + generated-stamp get valid-stamp? ] with-scope ] unit-test -{ t } [ generated-mint valid-stamp? ] unit-test +{ t } [ generated-stamp get valid-stamp? ] unit-test { t } [ "foo@bar.com" >>resource 16 >>bits @@ -51,6 +60,14 @@ CONSTANT: generated-mint $[ "foo@bar.com" mint ] { 30 } [ "220131" "220101" yymmdd-gmt-diff ] unit-test { -30 } [ "220101" "220131" yymmdd-gmt-diff ] unit-test -{ t } [ now-gmt 1 days time- timestamp>yymmdd on-or-before-today? nip ] unit-test -{ t } [ now-gmt timestamp>yymmdd on-or-before-today? nip ] unit-test -{ f } [ now-gmt 1 days time+ timestamp>yymmdd on-or-before-today? nip ] unit-test +{ t } [ + now-gmt 1 days time- timestamp>yymmdd on-or-before-today? nip +] unit-test + +{ t } [ + now-gmt timestamp>yymmdd on-or-before-today? nip +] unit-test + +{ f } [ + now-gmt 1 days time+ timestamp>yymmdd on-or-before-today? nip +] unit-test diff --git a/extra/hashcash/hashcash.factor b/extra/hashcash/hashcash.factor index 80651ed98a..46d4ac809a 100644 --- a/extra/hashcash/hashcash.factor +++ b/extra/hashcash/hashcash.factor @@ -1,5 +1,5 @@ ! Copyright (C) 2009 Diego Martinelli. -! Copyright (C) 2022 Zoltán Kéri. +! Copyright (C) 2023 Zoltán Kéri. ! See https://factorcode.org/license.txt for BSD license. USING: accessors byte-arrays calendar calendar.format calendar.parser checksums checksums.openssl classes.tuple @@ -87,8 +87,7 @@ PRIVATE> -- 2.34.1