]> gitweb.factorcode.org Git - factor.git/blob - extra/hashcash/hashcash-tests.factor
hashcash: Avoid generating the stamp unless it is unset or set to ``f``
[factor.git] / extra / hashcash / hashcash-tests.factor
1 ! Copyright (C) 2023 Zoltán Kéri.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors calendar hashcash hashcash.private kernel
4 literals namespaces sequences splitting tools.test ;
5 IN: hashcash.tests
6
7 : generate-stamp ( -- stamp ) "foo@bar.com" mint ;
8
9 ! Generate the stamp iff it does not exist.
10 ! You can delete it with `generated-stamp global delete-at`.
11 INITIALIZED-SYMBOL: generated-stamp [ generate-stamp ]
12
13 ! Generate the stamp iff it is set to `f`.
14 ! You can change it to `f` with `f generated-stamp set-global`.
15 generated-stamp get f eq? [ generate-stamp generated-stamp set ] when
16
17 { t } [
18     generated-stamp get dup ":" split third valid-date? swap drop
19 ] unit-test
20
21 { f } [
22     [ -1 expiry-days set
23       generated-stamp get valid-stamp?
24     ] with-scope
25 ] unit-test
26
27 { t } [
28     [ 0 expiry-days set
29       generated-stamp get valid-stamp?
30     ] with-scope
31 ] unit-test
32
33 { t } [ generated-stamp get valid-stamp? ] unit-test
34
35 { t } [
36     <hashcash> "foo@bar.com" >>resource 16 >>bits
37     mint* valid-stamp?
38 ] unit-test
39
40 { t } [
41     [ 9999 expiry-days set
42       "1:20:220403:foo@bar.com::fAY*-p!s:23472" valid-stamp?
43     ] with-scope
44 ] unit-test
45
46 { f } [
47     [ -1 expiry-days set
48       now-gmt-yymmdd valid-date?
49     ] with-scope
50 ] unit-test
51
52 { t } [
53     [ 0 expiry-days set
54       now-gmt-yymmdd valid-date?
55     ] with-scope
56 ] unit-test
57
58 { t } [ now-gmt-yymmdd valid-date? ] unit-test
59
60 {  30 } [ "220131" "220101" yymmdd-gmt-diff ] unit-test
61 { -30 } [ "220101" "220131" yymmdd-gmt-diff ] unit-test
62
63 { t } [
64     now-gmt 1 days time- timestamp>yymmdd on-or-before-today? nip
65 ] unit-test
66
67 { t } [
68     now-gmt timestamp>yymmdd on-or-before-today? nip
69 ] unit-test
70
71 { f } [
72     now-gmt 1 days time+ timestamp>yymmdd on-or-before-today? nip
73 ] unit-test