]> gitweb.factorcode.org Git - factor.git/commitdiff
hashcash: Avoid generating the stamp unless it is unset or set to ``f``
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 21 Aug 2023 22:56:42 +0000 (15:56 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 22 Aug 2023 01:24:03 +0000 (18:24 -0700)
extra/hashcash/hashcash-tests.factor
extra/hashcash/hashcash.factor

index 0482a38747b45163c7d9294943c0dc55a2045955..d71c8acb0dad06e48c5048941aaf1075462092ed 100644 (file)
@@ -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 } [
     <hashcash> "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
index 80651ed98af182e556f8d9f9c8e526bd7cb429d3..46d4ac809a505f7eedfe58656795259f608501d2 100644 (file)
@@ -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>
 <PRIVATE
 
 ! NOTE: Recommended expiry time is 28 days.
-SYMBOL: expiry-days
-expiry-days [ 28 ] initialize
+INITIALIZED-SYMBOL: expiry-days [ 28 ]
 
 PRIVATE>