shrub/gen/ford-turbo.hoon
Elliot Glaysher 84e05eba12 Integration of the state machine code complete; can boot a fakezod.
Fakezod boots with the new state machine code, and can run the +ford-turbo
test suite.
2018-07-24 10:54:16 -07:00

7350 lines
189 KiB
Plaintext

/+ tester
::
/= ford-turbo /: /===/sys/vane/turbo
/!noun/
::
=, ford-api
::
:- %say
|= [[now=@da eny=@ bek=beak] ~ ~]
:- %noun
~& %now-i-am-running-test
=+ tester:tester
::
=/ test-pit=vase !>(.)
=/ ford-gate (ford-turbo test-pit)
::
|^
=- ((slog -) ~)
^- tang
;: weld
test-tear
test-unify-jugs
test-resource-wire-encoding
test-parse-scaffold
test-parse-scaffold-sur-lib
test-parse-scaffold-zuse-version
test-parse-scaffold-crane-fssg
test-parse-scaffold-crane-fsbc
test-parse-scaffold-crane-fsbr
test-parse-scaffold-crane-fsts
test-parse-scaffold-crane-fsdt
test-parse-scaffold-crane-fscm
test-parse-scaffold-crane-fspm
test-parse-scaffold-crane-fscb
test-parse-scaffold-crane-fssm
test-parse-scaffold-crane-fscl
test-parse-scaffold-crane-fskt
test-parse-scaffold-crane-fszp
test-parse-scaffold-crane-fszy
test-literal
test-autocons-same
test-autocons-different
test-scry-clay-succeed
test-scry-clay-fail
test-scry-clay-block
test-scry-clay-multiblock
test-scry-clay-cancel
test-scry-clay-live
test-scry-clay-live-again
test-scry-clay-same-path
test-pinned-in-past
test-pinned-in-future
test-pinned-in-pin
test-pinned-in-live
test-live-build-that-blocks
test-live-and-once
test-live-two-deep
test-live-three-deep
test-live-triangle
test-live-and-pinned-triangle
test-call
test-call-scry-succeed
test-call-scry-fail
test-call-scry-block
test-call-scry-varies
test-dude
test-dude-error
test-hood
test-slim
test-slit
test-slit-error
test-ride
test-ride-scry-succeed
test-ride-scry-fail
test-ride-scry-block
test-ride-scry-promote
test-five-oh-fora
test-alts
test-alts-and-live
test-double-alts
:: test-cache-reclamation-trivial
:: test-cache-reclamation-live-rebuild
:: test-cache-reclamation-live-promote
:: test-five-oh-cache-reclamation
:: :: test-reef :: very slow
test-reef-short-circuit
test-path
test-plan-hoon
test-core
test-core-linker
test-core-multi-hoon
test-core-fsts-fssg
test-core-fsdt-fskt
test-core-fskt-nest-fail
test-core-fssm
test-core-fsbr
test-core-fsbr-out-of-options
test-plan-fszp-as-noun
test-core-fszp-as-mark
test-core-fscl-fszp
test-core-fscm
test-plan-fsbc
test-core-fscb
test-core-fspm
test-core-fszy-renderer
test-bunt
test-volt
test-vale
test-vale-error
test-cast
test-cast-grow
test-mute
test-bake-renderer
test-bake-mark
test-diff
test-diff-form
test-pact
test-pact-mark
test-join
test-list
test-mash
test-multi-core-same-dependency
test-walk-prefer-grab
test-walk-large-graph
test-cast-large-graph
==
++ test-tear
:- `tank`leaf+"test-tear"
::
;: welp
%- expect-eq !>
:- ~['a' 'bc' 'de']
(tear:ford-gate 'a-bc-de')
::
%- expect-eq !>
:- ~['abc']
(tear:ford-gate 'abc')
::
%- expect-eq !>
:- ~['ab/c']
(tear:ford-gate 'ab/c')
==
::
++ test-unify-jugs
:- `tank`leaf+"test-unify-jugs"
::
=/ ford (ford-gate now=~1234.5.6 eny=0xdead.beef scry=scry-is-forbidden)
::
%- expect-eq !>
:- ^- (jug @tas @ud)
(my ~[[%a (sy 1 2 ~)] [%b (sy 3 4 5 6 ~)] [%c (sy 7 8 ~)]])
::
%+ unify-jugs:ford
`(jug @tas @ud)`(my ~[[%a (sy 1 2 ~)] [%b (sy 3 4 ~)]])
`(jug @tas @ud)`(my ~[[%b (sy 5 6 ~)] [%c (sy 7 8 ~)]])
::
++ test-resource-wire-encoding
:- `tank`leaf+"test-resource-wire-encoding"
::
=/ ford (ford-gate now=~1234.5.6 eny=0xdead.beef scry=scry-is-forbidden)
::
;: welp
%- expect-eq !>
:- /cx/~nul/desk/~1234.5.6/bar/foo
^- path
%- scry-request-to-path:ford
[%c care=%x [[~nul %desk [%da ~1234.5.6]] /foo/bar]]
::
%- expect-eq !>
:- (need (path-to-scry-request:ford /cx/~nul/desk/~1234.5.6/bar/foo))
`scry-request:ford`[%c care=%x [[~nul %desk [%da ~1234.5.6]] /foo/bar]]
::
%- expect-eq !>
:- /gx/~nul/desk/~1234.5.6/bar/foo
^- path
%- scry-request-to-path:ford
[%g care=%x [[~nul %desk [%da ~1234.5.6]] /foo/bar]]
::
%- expect-eq !>
:- (need (path-to-scry-request:ford /gx/~nul/desk/~1234.5.6/bar/foo))
^- scry-request:ford
[%g care=%x [[~nul %desk [%da ~1234.5.6]] /foo/bar]]
==
::
++ test-parse-scaffold
:- `tank`leaf+"test-parse-scaffold"
::
%- expect-eq !>
:- :- [1 19]
:- ~
:_ [[1 19] ""]
^- scaffold:ford-gate
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=%309
structures=~
libraries=~
cranes=~
^= sources
:* %dbug [/~nul/desk/~1234.5.6/foo/bar [[1 1] [1 19]]]
(ream '!. |=(a=@ud +(a))')
==
~
==
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"!. |=(a=@ud +(a))"
::
++ test-parse-scaffold-sur-lib
:- `tank`leaf+"test-parse-scaffold-sur-lib"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/- struct, face=other
/+ library, *thing
!.
|=(a a)
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~[[`%struct %struct] [`%face %other]]
libraries=~[[`%library %library] [~ %thing]]
cranes=~
^= sources
:~ :* %dbug
[/~nul/desk/~1234.5.6/foo/bar [3 1] [4 8]]
(ream '|=(a a)')
== == ==
::
++ test-parse-scaffold-zuse-version
:- `tank`leaf+"test-parse-scaffold-zuse-version"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/? 400
!.
|=(a a)
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=400
structures=~
libraries=~
cranes=~
^= sources
:~ :* %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 1] [3 8]]
(ream '|=(a a)')
== == ==
::
++ test-parse-scaffold-crane-fssg
:- `tank`leaf+"test-parse-scaffold-crane-fssg"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/~ !. [a=1 b=3]
!.
|=(a b)
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fssg
%dbug
[/~nul/desk/~1234.5.6/foo/bar [1 5] [1 18]]
(ream '[a=1 b=3]')
== ==
^= sources
:~ :* %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 1] [3 8]]
(ream '|=(a b)')
== == ==
::
++ test-parse-scaffold-crane-fsbc
:- `tank`leaf+"test-parse-scaffold-crane-fsbc"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/$ !. |=(a a)
!.
|=(a b)
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsbc
%dbug
[/~nul/desk/~1234.5.6/foo/bar [1 5] [1 16]]
(ream '|=(a a)')
== ==
^= sources
:~ :* %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 1] [3 8]]
(ream '|=(a b)')
== == ==
::
++ test-parse-scaffold-crane-fsbr
:- `tank`leaf+"test-parse-scaffold-crane-fsbr"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/| /~ ~
/~ ~
==
5
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsbr
:~ :* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [1 9] [1 10]]
[%bust %null]
==
:* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 9] [2 10]]
[%bust %null]
== == == ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [4 1] [4 2]] [%sand %ud 5]]
== ==
::
++ test-parse-scaffold-crane-fsts
:- `tank`leaf+"test-parse-scaffold-crane-fsts"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= a /~ ~
5
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %a
%fssg %dbug [/~nul/desk/~1234.5.6/foo/bar [1 12] [1 13]]
[%bust %null]
== ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [2 1] [2 2]] [%sand %ud 5]]
== ==
::
++ test-parse-scaffold-crane-fsdt
:- `tank`leaf+"test-parse-scaffold-crane-fsdt"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/. /~ !. a=5
/~ !. b=6
==
5
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsdt
:~ :* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [1 9] [1 16]]
(ream 'a=5')
==
:* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 9] [2 16]]
(ream 'b=6')
== == == ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [4 1] [4 2]] [%sand %ud 5]]
== ==
::
++ test-parse-scaffold-crane-fscm
:- `tank`leaf+"test-parse-scaffold-crane-fscm"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/,
/path/to/a
/~ !. a=5
::
/path/to/b
/~ !. b=6
==
1
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fscm
:~ :- /path/to/a
:* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [3 7] [3 14]]
(ream 'a=5')
==
:- /path/to/b
:* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [6 7] [6 14]]
(ream 'b=6')
== == == ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [8 1] [8 2]] [%sand %ud 1]]
== ==
::
++ test-parse-scaffold-crane-fspm
:- `tank`leaf+"test-parse-scaffold-crane-fspm"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= data /& mark /~ !. a=1
1
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fspm [%mark ~]
%fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [1 25] [1 32]]
(ream 'a=1')
== ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [2 1] [2 2]] [%sand %ud 1]]
== ==
::
++ test-parse-scaffold-crane-fscb
:- `tank`leaf+"test-parse-scaffold-crane-fscb"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/_ /mark/
8
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fscb %fszy %mark
== ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [2 1] [2 2]] [%sand %ud 8]]
== ==
::
++ test-parse-scaffold-crane-fssm
:- `tank`leaf+"test-parse-scaffold-crane-fssm"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= data
/; !. |=(a=@u +(a))
/~ !. 5
7
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fssm
:* %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 7] [2 24]]
(ream '|=(a=@u +(a))')
==
%fssg
:* %dbug
[/~nul/desk/~1234.5.6/foo/bar [3 7] [3 12]]
(ream '5')
== == ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [4 1] [4 2]] [%sand %ud 7]]
== ==
::
++ test-parse-scaffold-crane-fscl
:- `tank`leaf+"test-parse-scaffold-crane-fscl"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= tests
/: /===/tests
/_ /mark/
3
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %tests
%fscl [[~ ~[~ ~ ~ [~ [%sand %tas 495.874.958.708]]]] ~]
%fscb %fszy %mark
== ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [4 1] [4 2]] [%sand %ud 3]]
== ==
::
++ test-parse-scaffold-crane-fskt
:- `tank`leaf+"test-parse-scaffold-crane-fskt"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= data
/^ !. (list @ud)
/. /~ !. 1
/~ !. 2
==
6
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fskt
:* %dbug
[/~nul/desk/~1234.5.6/foo/bar [2 7] [2 21]]
(ream '(list @ud)')
==
%fsdt
:~ :* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [3 11] [3 16]]
(ream '1')
==
:* %fssg %dbug
[/~nul/desk/~1234.5.6/foo/bar [4 11] [4 16]]
(ream '2')
== == == ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [6 1] [6 2]] [%sand %ud 6]]
== ==
::
++ test-parse-scaffold-crane-fszp
:- `tank`leaf+"test-parse-scaffold-crane-fszp"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= data /!mark/
2
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fszp %mark
== ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [2 1] [2 2]] [%sand %ud 2]]
== ==
::
++ test-parse-scaffold-crane-fszy
:- `tank`leaf+"test-parse-scaffold-crane-fszy"
::
=/ parsed
%+ (full (parse-scaffold:ford-gate [[~nul %desk %da ~1234.5.6] /bar/foo]))
[1 1]
"""
/= data /mark/
9
"""
?~ q.parsed
[%leaf "failed to parse at {<p.parsed>}"]~
%- expect-eq !>
:_ p.u.q.parsed
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
^= crane
:~ :* %fsts %data
%fszy %mark
== ==
^= sources
:~ [%dbug [/~nul/desk/~1234.5.6/foo/bar [2 1] [2 2]] [%sand %ud 9]]
== ==
::
++ test-literal
:- `tank`leaf+"test-literal"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
:: send a pinned literal, expects a %made response with pinned literal
::
^= call-args
[duct=~ type=~ %build ~nul live=%.n [%$ %noun !>(**)]]
::
^= moves
:~ :* duct=~ %give %made ~1234.5.6
%complete %success %$ %noun !>(**)
== ==
==
::
%+ welp
results1
(expect-ford-empty ford-gate ~nul)
::
++ test-autocons-same
:- `tank`leaf+"test-autocons-same"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
:: if we autocons the same schematic, we should get two of it as a result
::
^= call-args
:* duct=~ type=~ %build ~nul live=%.n
[[%$ %noun !>(**)] [%$ %noun !>(**)]]
==
::
^= moves
:~ :* duct=~ %give %made ~1234.5.6 %complete
%success
[%success %$ %noun !>(**)]
[%success %$ %noun !>(**)]
== == ==
::
%+ welp
results1
(expect-ford-empty ford-gate ~nul)
::
++ test-autocons-different
:- `tank`leaf+"test-autocons-different"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
:: if we autocons different schematics, we get different values
::
^= call-args
:* duct=~ type=~ %build ~nul live=%.n
[[%$ %noun !>(42)] [%$ %noun !>(43)]]
==
::
^= moves
:~ :* duct=~ %give %made ~1234.5.6 %complete
%success
[%success %$ %noun !>(42)]
[%success %$ %noun !>(43)]
== == ==
::
%+ welp
results1
(expect-ford-empty ford-gate ~nul)
::
++ test-scry-clay-succeed
:- `tank`leaf+"test-scry-clay-succeed"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-succeed ~1234.5.6 [%noun !>(42)])
:: test a pinned scry which succeeds
::
^= call-args
:* duct=~ type=~ %build ~nul live=%.n
[%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~ %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
== == ==
::
%+ welp
results1
(expect-ford-empty ford-gate ~nul)
::
++ test-scry-clay-fail
:- `tank`leaf+"test-scry-clay-fail"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-fail ~1234.5.6)
:: attempting to scry a path which fails should produce an error
::
^= call-args
:* duct=~ type=~ %build ~nul live=%.n
[%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~ %give %made ~1234.5.6 %complete
%error
:~ leaf+"scry failed for"
leaf+"%cx /~nul/desk/~1234.5.6/foo/bar"
== == == ==
::
%+ weld
results1
(expect-ford-empty ford-gate ~nul)
::
++ test-scry-clay-block
:- `tank`leaf+"test-scry-clay-block"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-block ~1234.5.6)
:: when we scry on a blocked path, expect a subscription move
::
^= call-args
:* duct=~ type=~ %build ~nul live=%.n
[%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~ %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
:: when clay responds, send a %made
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar duct=~
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %writ ~ [%x [%da ~1234.5.6] %desk] /bar/foo %noun !>(42)]
==
::
^= moves
:~ :* duct=~ %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
== == ==
::
;: welp
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-scry-clay-multiblock
:- `tank`leaf+"test-scry-clay-multiblock"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-block ~1234.5.6)
:: when we scry on a blocked path, expect a subscription move
::
^= call-args
:* duct=~[/one] type=~ %build ~nul live=%.n
[%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/one] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=(scry-block ~1234.5.6)
:: when we scry on a blocked path, expect a subscription move
::
^= call-args
:* duct=~[/two] type=~ %build ~nul live=%.n
[%pin ~1234.5.6 [%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]]
==
::
^= moves ~
==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
:: when clay responds, send a %made
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar duct=~
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %writ ~ [%x [%da ~1234.5.6] %desk] /bar/foo %noun !>(42)]
==
::
^= moves
:~ :* duct=~[/one] %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
==
:* duct=~[/two] %give %made ~1234.5.7 %complete %success
[%scry %noun !>(42)]
== == ==
::
;: welp
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-scry-clay-cancel
:- `tank`leaf+"test-scry-clay-cancel"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-block ~1234.5.6)
:: when we scry on a blocked path, expect a subscription move
::
^= call-args
:* duct=~[/one] type=~ %build ~nul live=%.n
[%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/one] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/one] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/one] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-scry-clay-live
:- `tank`leaf+"test-scry-clay-live"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-succeed ~1234.5.6 [%noun !>(42)])
::
^= call-args
:* duct=~[/first] type=~ %build ~nul live=%.y
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/first] %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
==
:* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar]~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=(scry-succeed ~1234.5.7 [%noun !>(43)])
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/first]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/first] %give %made ~1234.5.7 %complete %success
[%scry %noun !>(43)]
==
:* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar]~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/first] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-scry-clay-live-again
:- `tank`leaf+"test-scry-clay-live-again"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-succeed ~1234.5.6 [%noun !>(42)])
:: perform a live scry, we should get a %made and a clay subscription
::
^= call-args
:* duct=~[/first] type=~ %build ~nul live=%.y
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/first] %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
==
:* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar]~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=(scry-succeed ~1234.5.7 [%noun !>(42)])
::
^= call-args
:* duct=~[/second] type=~ %build ~nul live=%.y
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/second] %give %made ~1234.5.7 %complete %success
[%scry %noun !>(42)]
==
:* duct=~[/second] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar]~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/first] type=~ %kill ~nul]
^= moves
:~ :* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk ~
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry-is-forbidden
::
call-args=[duct=~[/second] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/second] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
:: tests multiple subscriptions on the same resource at different times
::
:: We can depend on the same paths but at different times. Make sure we can
:: block on /~nul/desk/~1234.5.7/... and /~nul/desk/~1234.5.8/... at the
:: same time.
::
++ test-scry-clay-same-path
:- `tank`leaf+"test-scry-clay-same-path"
::
=/ scry-type=type [%atom %tas ~]
::
=/ blocks=(set @da) (sy ~1234.5.7 ~1234.5.8 ~)
::
=/ scry-schematic=schematic:ford-gate
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
=/ autocons=schematic:ford-gate
[[%pin ~1234.5.7 scry-schematic] [%pin ~1234.5.8 scry-schematic]]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-blocks blocks)
::
call-args=[duct=~[/first] type=~ %build ~nul live=%.y autocons]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
%- expect-eq !>
:- (sy moves)
%- sy
:~ :* duct=~[/first] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.7/foo/bar
%c %warp [~nul ~nul] %desk
`[%sing %x [%da ~1234.5.7] /foo/bar]
==
:* duct=~[/first] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.8/foo/bar
%c %warp [~nul ~nul] %desk
`[%sing %x [%da ~1234.5.8] /foo/bar]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=(scry-blocks blocks)
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.7/foo/bar duct=~[/first]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
:* %c %writ ~ [%x [%da ~1234.5.7] %desk]
/bar/foo %noun scry-type %seven
==
==
::
expected-moves=~
==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=(scry-blocks blocks)
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.8/foo/bar duct=~[/first]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
:* %c %writ ~ [%x [%da ~1234.5.8] %desk]
/bar/foo %noun scry-type %eight
==
==
::
^= expected-moves
^- (list move:ford-gate)
:~ :* duct=~[/first] %give %made ~1234.5.6 %complete %success
[%success %scry %noun scry-type %seven]
[%success %scry %noun scry-type %eight]
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry-is-forbidden
::
call-args=[duct=~[/first] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
::
++ test-pinned-in-past
:- `tank`leaf+"test-pinned-in-past"
::
=/ schematic [%pin ~1234.5.5 [%$ %noun !>(42)]]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/pin] type=~ %build ~nul live=%.n schematic]
::
^= expected-moves
:~ :* duct=~[/pin] %give %made ~1234.5.6 %complete
%success %$ %noun !>(42)
== == ==
results1
::
++ test-pinned-in-future
:- `tank`leaf+"test-pinned-in-future"
::
=/ schematic [%pin ~1234.5.7 [%$ %noun !>(42)]]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/pin] type=~ %build ~nul live=%.n schematic]
::
^= expected-moves
:~ :* duct=~[/pin] %give %made ~1234.5.6 %complete
%success %$ %noun !>(42)
== == ==
results1
::
++ test-pinned-in-pin
:- `tank`leaf+"test-pinned-in-pin"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=(scry-succeed ~1234.5.6 [%noun !>(42)])
::
^= call-args
:* duct=~[/pinned-in-pin] type=~ %build ~nul live=%.n
%pin ~1234.5.7
%pin ~1234.5.6
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/pinned-in-pin]
%give %made ~1234.5.8 %complete
[%success %scry %noun !>(42)]
== == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-pinned-in-live
:- `tank`leaf+"test-pinned-in-live"
::
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
=/ scry-43 (scry-succeed ~1234.5.7 [%noun !>(43)])
::
=/ schematic=schematic:ford-gate
:* %same %pin ~1234.5.6
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
=/ build=build:ford-gate [~1234.5.6 schematic]
=/ result=build-result:ford-gate
[%success [%scry %noun !>(42)]]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-42
::
call-args=[duct=~[/live] type=~ %build ~nul live=%.y schematic]
moves=[duct=~[/live] %give %made ~1234.5.6 %complete result]~
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/live] type=~ %kill ~nul]
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-live-build-that-blocks
:- `tank`leaf+"test-live-build-that-blocks"
::
=/ scry-blocked (scry-block ~1234.5.6)
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
=/ scry-43 (scry-succeed ~1234.5.8 [%noun !>(43)])
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-blocked
::
^= call-args
:* duct=~[/live] type=~ %build ~nul live=%.y
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/live] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry-42
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar duct=~[/live]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %writ ~ [%x [%da ~1234.5.6] %desk] /bar/foo %noun !>(42)]
==
::
^= moves
:~ :* duct=~[/live] %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
==
:* duct=~[/live] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar]~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=scry-43
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/live]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.8] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/live] %give %made ~1234.5.8 %complete %success
[%scry %noun !>(43)]
==
:* duct=~[/live] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.8] (sy [%x /foo/bar]~)]
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry-is-forbidden
::
call-args=[duct=~[/live] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/live] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
::
++ test-live-and-once
:- `tank`leaf+"test-live-and-once"
::
=/ scry-blocked (scry-block ~1234.5.6)
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-blocked
::
^= call-args
:* duct=~[/live] type=~ %build ~nul live=%.y
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/live] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-blocked
::
^= call-args
:* duct=~[/once] type=~ %build ~nul live=%.n
[%pin ~1234.5.6 [%scry %c ren=%x rail=[[~nul %desk] /bar/foo]]]
==
::
moves=~
==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar duct=~[/live]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %writ ~ [%x [%da ~1234.5.6] %desk] /bar/foo %noun !>(42)]
==
::
^= moves
:~ :* duct=~[/live] %give %made ~1234.5.6 %complete
[%success [%scry %noun !>(42)]]
==
:* duct=~[/live] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar]~)]
==
:* duct=~[/once] %give %made ~1234.5.7 %complete
[%success [%scry %noun !>(42)]]
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry-is-forbidden
::
call-args=[duct=~[/live] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/live] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
::
++ test-live-two-deep
:- `tank`leaf+"test-live-two-deep"
::
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
=/ scry-43 (scry-succeed ~1234.5.7 [%noun !>(43)])
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-42
::
^= call-args
:* duct=~[/two-deep-4u] type=~ %build ~nul live=%.y
[%same [%scry %c care=%x rail=[[~nul %desk] /bar/foo]]]
==
::
^= moves
:~ :* duct=~[/two-deep-4u] %give %made ~1234.5.6 %complete
%success [%scry %noun !>(42)]
==
:* duct=~[/two-deep-4u] %pass
wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar]~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry-43
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/two-deep-4u]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/two-deep-4u] %give %made ~1234.5.7 %complete
%success [%scry %noun !>(43)]
==
:* duct=~[/two-deep-4u] %pass
wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar]~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/two-deep-4u] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/two-deep-4u] %pass
wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-live-three-deep
:- `tank`leaf+"test-live-three-deep"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /bar/foo]]
[%noun scry-type %it-doesnt-matter]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /bar/foo]]
[%noun scry-type %changed]
==
::
=/ scry (scry-with-results scry-results)
::
=/ formula=hoon (ream '`@tas`%constant')
=/ subject-schematic=schematic:ford-gate
[%scry %c %x [~nul %desk] /bar/foo]
::
=/ ride=schematic:ford-gate [%ride formula subject-schematic]
=/ same=schematic:ford-gate [%same ride]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/ride] type=~ %build ~nul live=%.y same]
::
^= moves
:~ :* duct=~[/ride] %give %made ~1234.5.6 %complete
[%success [%ride scry-type %constant]]
==
:* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/ride]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/ride] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-live-triangle
:- `tank`leaf+"test-live-triangle"
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /bar/foo]]
[%noun !>(%it-does-in-fact-matter)]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /bar/foo]]
[%noun !>(%changed)]
==
::
=/ scry (scry-with-results scry-results)
::
=/ formula=hoon (ream '`@tas`%constant')
=/ subject-schematic=schematic:ford-gate
[%scry %c %x [~nul %desk] /bar/foo]
::
=/ ride-type=type [%atom %tas ~]
=/ ride=schematic:ford-gate [%ride formula subject-schematic]
=/ autocons=schematic:ford-gate [ride subject-schematic]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/ride] type=~ %build ~nul live=%.y autocons]
::
^= moves
:~ :* duct=~[/ride] %give %made ~1234.5.6 %complete %success
[%success [%ride ride-type %constant]]
[%success [%scry %noun !>(%it-does-in-fact-matter)]]
==
:* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/ride]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/ride] %give %made ~1234.5.7 %complete %success
[%success [%ride ride-type %constant]]
[%success [%scry %noun !>(%changed)]]
==
:* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/ride] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
:: like +test-live-triangle, but with another pinned build
::
:: Ensures that we deal with various issues with live builds which
:: were partially pinned and their interaction with other live builds.
::
++ test-live-and-pinned-triangle
:- `tank`leaf+"test-live-and-pinned-triangle"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /bar/foo]]
[%noun scry-type %it-does-in-fact-matter]
::
:- [%cx [[~nul %home %da ~1234.5.7] /bar/foo]]
[%noun scry-type %it-does-in-fact-matter]
==
::
=/ scry (scry-with-results scry-results)
::
=/ formula=hoon (ream '`@tas`%constant')
=/ subject-schematic=schematic:ford-gate [%scry %c %x [~nul %home] /bar/foo]
::
=/ ride-type=type [%atom %tas ~]
=/ ride=schematic:ford-gate [%ride formula subject-schematic]
=/ autocons=schematic:ford-gate [ride subject-schematic]
::
=/ static=schematic:ford-gate [%same [%pin ~1234.5.6 autocons]]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/static] type=~ %build ~nul live=%.y static]
::
^= moves
:~ :* duct=~[/static] %give %made ~1234.5.6 %complete %success
[%success [%ride ride-type %constant]]
[%success [%scry %noun scry-type %it-does-in-fact-matter]]
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry
::
call-args=[duct=~[/autocons] type=~ %build ~nul live=%.y autocons]
::
^= moves
:~ :* duct=~[/autocons] %give %made ~1234.5.7 %complete %success
[%success [%ride ride-type %constant]]
[%success [%scry %noun scry-type %it-does-in-fact-matter]]
==
:* duct=~[/autocons] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.7
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/static] type=~ %kill ~nul]
::
moves=~
==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry-is-forbidden
::
call-args=[duct=~[/autocons] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/autocons] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.7
%c %warp [~nul ~nul] %home ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
::
++ test-call
:- `tank`leaf+"test-call"
::
=/ sample-schematic=schematic:ford-gate [%$ %noun !>(5)]
=/ gate-schematic=schematic:ford-gate [%$ %noun !>(|=(a=@ud +(a)))]
=/ call-schematic=schematic:ford-gate
[%call gate-schematic sample-schematic]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/call] type=~ %build ~nul live=%.y call-schematic]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %success %call *] i.moves)
::
=/ result=vase |7:i.moves
::
%+ weld
%- expect-eq !>
[6 q.result]
::
%- expect-eq !>
:- &
(~(nest ut p.result) | -:!>(*@ud))
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/call] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-call-scry-succeed
:- `tank`leaf+"test-call-scry-succeed"
::
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
::
=/ sample-schematic=schematic:ford-gate [%$ %noun !>(24)]
=/ gate-schematic=schematic:ford-gate
[%$ %noun !>(|=(a=@ud .^(@ud %cx /~nul/desk/~1234.5.6/foo/bar)))]
=/ call-schematic=schematic:ford-gate
[%call gate-schematic sample-schematic]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-42
::
call-args=[duct=~[/call] type=~ %build ~nul live=%.y call-schematic]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
::
?> ?=([* %give %made @da %complete %success %call *] i.moves)
::
=/ result=vase |7:i.moves
::
%+ weld
%- expect-eq !>
[42 q.result]
::
%- expect-eq !>
:- &
(~(nest ut p.result) | -:!>(*@ud))
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/call] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
++ test-call-scry-fail
:- `tank`leaf+"test-call-scry-fail"
::
=/ scry-failed (scry-fail ~1234.5.6)
::
=/ sample-schematic=schematic:ford-gate [%$ %noun !>(24)]
=/ gate-schematic=schematic:ford-gate
[%$ %noun !>(|=(a=@ud .^(@ud %cx /~nul/desk/~1234.5.6/foo/bar)))]
=/ call-schematic=schematic:ford-gate
[%call gate-schematic sample-schematic]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-failed
::
call-args=[duct=~[/dead] type=~ %build ~nul live=%.y call-schematic]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %error *] i.moves)
::
%- expect-eq !>
:: compare the move to the expected move, omitting check on stack trace
::
:_ i.moves(|7 ~)
:* duct=~[/dead] %give %made ~1234.5.6 %complete
[%error [leaf+"ford: %call failed:" ~]]
== ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/dead] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
::
++ test-call-scry-block
:- `tank`leaf+"test-call-scry-block"
::
=/ scry-blocked (scry-block ~1234.5.6)
::
=/ sample-schematic=schematic:ford-gate [%$ %noun !>(24)]
=/ gate-schematic=schematic:ford-gate
[%$ %noun !>(|=(a=@ud .^(@ud %cx /~nul/desk/~1234.5.6/foo/bar)))]
=/ call-schematic=schematic:ford-gate
[%call gate-schematic sample-schematic]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-blocked
::
call-args=[duct=~[/live] type=~ %build ~nul live=%.y call-schematic]
::
^= moves
:~ :* duct=~[/live] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.7
scry=scry-blocked
::
^= call-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar duct=~
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %writ ~ [%x [%da ~1234.5.6] %desk] /bar/foo %noun !>(42)]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %success %call *] i.moves)
::
%+ welp
%- expect-eq !>
:: compare the move to the expected move, omitting vase type checking
::
:: Types can't be compared using simple equality, so normalize the
:: type to check the rest of the move.
::
:_ i.moves(&8 *type)
:* duct=~[/live] %give %made ~1234.5.6 %complete
[%success [%call *type 42]]
==
:: make sure the types nest
::
%- expect-eq !>
:- &
(~(nest ut &8:i.moves) | -:!>(*@))
==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/live] type=~ %kill ~nul]
moves=~
==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
:: +test-call-scry-varies: call with an argument which varies
::
:: This test reads the sample for a %call schematic from clay. This sample
:: is a date. Inside of the gate called, we scry on a path based on the
:: passed in sample date.
::
++ test-call-scry-varies
:- `tank`leaf+"test-call-scry-varies"
::
=/ date-type=type [%atom %da ~]
=/ term-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /timer]]
[%noun date-type ~1234.5.6]
::
:- [%cx [[~nul %desk %da ~1234.5.6] /result]]
[%noun term-type %first]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /timer]]
[%noun date-type ~1234.5.7]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /result]]
[%noun term-type %second]
==
::
=/ scry (scry-with-results scry-results)
::
=/ sample-schematic=schematic:ford-gate
[%scry [%c care=%x bel=[[~nul %desk] /timer]]]
=/ gate-schematic=schematic:ford-gate
[%$ %noun !>(|=(a=@da .^(@tas %cx /~nul/desk/(scot %da a)/result)))]
=/ call-schematic=schematic:ford-gate
[%call gate-schematic sample-schematic]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry
::
^= call-args
[duct=~[/call] type=~ %build ~nul live=%.y call-schematic]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %call *] i.moves)
:: compare the move to the expected move, omitting vase type checking
::
%+ weld
%- expect-eq !>
:_ i.moves(&8 *type)
:* duct=~[/call] %give %made ~1234.5.6 %complete %success
%call *type %first
==
:: make sure the types nest
%+ weld
%- expect-eq !>
:- &
(~(nest ut &8:i.moves) | -:!>(*@tas))
:: make sure the other move is a subscription
::
%- expect-eq !>
:_ i.t.moves
:* duct=~[/call] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /timer] ~)]
== ==
::
=^ results2 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.7
scry=scry
::
^= call-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/call]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /timer]~)]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %call *] i.moves)
:: compare the move to the expected move, omitting vase type checking
::
%+ weld
%- expect-eq !>
:_ i.moves(&8 *type)
:* duct=~[/call] %give %made ~1234.5.7 %complete %success
%call *type %second
==
:: make sure the types nest
%+ weld
%- expect-eq !>
:- &
(~(nest ut &8:i.moves) | -:!>(*@tas))
:: make sure the other move is a subscription
::
%- expect-eq !>
:_ i.t.moves
:* duct=~[/call] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /timer] ~)]
== ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/call] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/call] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-dude
:- `tank`leaf+"test-dude"
::
=/ schematic=schematic:ford-gate
:* %dude |.(>%test-no-error<)
[%scry [%c care=%x bel=[[~nul %desk] /bar/foo]]]
==
::
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-42
::
call-args=[duct=~[/once] type=~ %build ~nul live=%.n schematic]
::
^= moves
:~ :* duct=~[/once] %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
== == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-dude-error
:- `tank`leaf+"test-dude-error"
::
=/ schematic=schematic:ford-gate
:* %dude |.(>%in-the-error-message<)
[%scry [%c care=%x bel=[[~nul %desk] /bar/foo]]]
==
::
=/ scry-42 (scry-fail ~1234.5.6)
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-42
::
call-args=[duct=~[/once] type=~ %build ~nul live=%.n schematic]
::
^= moves
:~ :* duct=~[/once] %give %made ~1234.5.6 %complete
%error
:~ leaf+"%in-the-error-message"
leaf+"scry failed for"
leaf+"%cx /~nul/desk/~1234.5.6/foo/bar"
== == == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-hood
:- `tank`leaf+"test-hood"
::
=/ scry-type=type [%atom %tas ~]
=/ scry
%- scry-with-results
^- (map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /hoon/bar/foo]]
:* %noun scry-type
'!. |=(a=@ud +(a))'
==
==
::
=/ schematic=schematic:ford-gate [%hood [[~nul %desk] /hoon/bar/foo]]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/hood] type=~ %build ~nul live=%.y schematic]
::
^= moves
:~ :* duct=~[/hood] %give %made ~1234.5.6
%complete %success %hood
:* source-rail=[[~nul %desk] /hoon/bar/foo]
zuse-version=309
structures=~
libraries=~
cranes=~
^= sources
:~ :* %dbug
[/~nul/desk/0/foo/bar/hoon [1 1] [1 19]]
(ream '|=(a=@ud +(a))')
== == == ==
:* duct=~[/hood] %pass /~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar/hoon] ~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/hood] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/hood] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-slim
:- `tank`leaf+"test-slim"
::
=/ formula=hoon (ream '(add 2 2)')
=/ subject-type=type -:!>(.)
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
^= call-args
[duct=~[/dead] type=~ %build ~nul live=%.y [%slim subject-type formula]]
::
^= moves
:~ :* duct=~[/dead] %give %made ~1234.5.6 %complete
[%success [%slim (~(mint ut subject-type) [%noun formula])]]
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/dead] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-slit
:- `tank`leaf+"test-slit"
::
=/ gate=vase (ride %noun '|=(a=@ud ["one" a])')
=/ sample=vase !>(42)
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/slit] type=~ %build ~nul live=%.y [%slit gate sample]]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %success %slit *] i.moves)
:: we are expecting a type, and all we can do is ensure it nests in
:: the right type
::
=/ expected-type=type -:!>([*tape *@ud])
=/ actual-type=type |7:i.moves
%- expect-eq !>
:- &
(~(nest ut actual-type) | expected-type)
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/slit] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-slit-error
:- `tank`leaf+"test-slit-error"
::
=/ gate=vase (ride %noun '|=(a=@ud ["one" a])')
=/ sample=vase !>("a tape instead of @ud")
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/slit] type=~ %build ~nul live=%.y [%slit gate sample]]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %error *] i.moves)
:: ignore last message; contains source positions in the stack trace
::
=/ messages=tang (scag 4 `tang`|6:i.moves)
::
%- expect-eq !>
:_ messages
:~ [%palm ["." "-" "" ""] [%leaf "have"] [%leaf "\"\""] ~]
:~ %palm ["." "-" "" ""]
[%leaf "want"]
[%palm ["/" "" "" ""] [%leaf "a"] [%leaf "@ud"] ~]
==
[%leaf "%slit failed: "]
[%leaf "nest-fail"]
==
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/slit] type=~ %kill ~nul]
::
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-ride
:- `tank`leaf+"test-ride"
::
=/ fun |=(a=@ (add 2 a))
=/ formula=hoon (ream '!: (fun 3)')
=/ subject-schematic=schematic:ford-gate [%$ %noun !>(.)]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
^= call-args
:* duct=~[/dead] type=~ %build ~nul live=%.y
[%ride formula subject-schematic]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %success %ride *] i.moves)
::
%+ weld
%- expect-eq !>
:: compare the move to the expected move, omitting vase type checking
::
:: Types can't be compared using simple equality, so normalize the
:: type to check the rest of the move.
::
:_ i.moves(&8 *type)
:* duct=~[/dead] %give %made ~1234.5.6 %complete
[%success [%ride *type 5]]
==
:: make sure the returned type nests
::
%- expect-eq !>
:- &
(~(nest ut &8:i.moves) | -:!>(*@))
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/dead] type=~ %kill ~nul]
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-ride-scry-succeed
:- `tank`leaf+"test-ride-scry-succeed"
::
=/ scry-42 (scry-succeed ~1234.5.6 [%noun !>(42)])
::
=/ formula=hoon (ream '!: .^(* %cx /~nul/desk/~1234.5.6/foo/bar)')
=/ subject-schematic=schematic:ford-gate [%$ %noun !>(.)]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-42
::
^= call-args
:* duct=~[/dead] type=~ %build ~nul live=%.y
[%ride formula subject-schematic]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %success %ride *] i.moves)
::
%+ welp
%- expect-eq !>
:: compare the move to the expected move, omitting vase type checking
::
:: Types can't be compared using simple equality, so normalize the
:: type to check the rest of the move.
::
:_ i.moves(&8 *type)
:* duct=~[/dead] %give %made ~1234.5.6 %complete
[%success [%ride *type 42]]
==
::
%- expect-eq !>
:- &
(~(nest ut &8:i.moves) | -:!>(*@))
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/dead] type=~ %kill ~nul]
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-ride-scry-fail
:- `tank`leaf+"test-ride-scry-fail"
::
=/ scry-failed (scry-fail ~1234.5.6)
::
=/ formula=hoon (ream '!: .^(* %cx /~nul/desk/~1234.5.6/foo/bar)')
=/ subject-schematic=schematic:ford-gate [%$ %noun !>(.)]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-failed
::
^= call-args
:* duct=~[/dead] type=~ %build ~nul live=%.y
[%ride formula subject-schematic]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %error *] i.moves)
::
%- expect-eq !>
:: compare the move to the expected move, omitting check on stack trace
::
:_ i.moves(|7 ~)
:* duct=~[/dead] %give %made ~1234.5.6 %complete
[%error [leaf+"ford: %ride failed:" ~]]
== ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
::
call-args=[duct=~[/dead] type=~ %kill ~nul]
moves=~
==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-ride-scry-block
:- `tank`leaf+"test-ride-scry-block"
::
=/ scry-blocked (scry-block ~1234.5.6)
::
=/ formula=hoon (ream '!: .^(* %cx /~nul/desk/~1234.5.6/foo/bar)')
=/ subject-schematic=schematic:ford-gate [%$ %noun !>(.)]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-blocked
::
^= call-args
:* duct=~[/live] type=~ %build ~nul live=%.y
[%ride formula subject-schematic]
==
::
^= moves
:~ :* duct=~[/live] %pass
wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar
%c %warp [~nul ~nul] %desk
~ %sing %x [%da ~1234.5.6] /foo/bar
== == ==
::
=^ results2 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.7
:: TODO: using +scry-is-forbidden causes a bail: 4
::
scry=scry-blocked
::
^= take-args
:* wire=/~nul/scry-request/cx/~nul/desk/~1234.5.6/foo/bar duct=~[/live]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %writ ~ [%x [%da ~1234.5.6] %desk] /bar/foo %noun !>(42)]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete %success %ride *] i.moves)
::
%+ welp
%- expect-eq !>
:: compare the move to the expected move, omitting vase type checking
::
:: Types can't be compared using simple equality, so normalize the
:: type to check the rest of the move.
::
:_ i.moves(&8 *type)
:* duct=~[/live] %give %made ~1234.5.6 %complete
[%success [%ride *type 42]]
==
:: make sure the types nest
::
%- expect-eq !>
:- &
(~(nest ut &8:i.moves) | -:!>(*@))
==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/live] type=~ %kill ~nul]
moves=~
==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-ride-scry-promote
:- `tank`leaf+"test-ride-scry-promote"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /bar/foo]]
[%noun scry-type %it-doesnt-matter]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /bar/foo]]
[%noun scry-type %changed]
==
::
=/ scry (scry-with-results scry-results)
::
=/ formula=hoon (ream '`@tas`%constant')
=/ subject-schematic=schematic:ford-gate [%scry %c %x [~nul %desk] /bar/foo]
::
=/ ride=schematic:ford-gate [%ride formula subject-schematic]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/ride] type=~ %build ~nul live=%.y ride]
::
^= moves
:~ :* duct=~[/ride] %give %made ~1234.5.6 %complete
[%success [%ride scry-type %constant]]
==
:* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/ride]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/ride] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
(expect-ford-empty ford-gate ~nul)
==
::
++ test-five-oh-fora
:- `tank`leaf+"test-five-oh-fora"
::
=/ scry-type=type
[%cell [%face [~ %title] [%atom %tas ~]] [%face [~ %contents] -:!>("")]]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /a/posts]]
[%noun scry-type [title='post-a' contents="post-a-contents"]]
::
:- [%cx [[~nul %desk %da ~1234.5.6] /b/posts]]
[%noun scry-type [title='post-b' contents="post-b-contents"]]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /a/posts]]
[%noun scry-type [title='post-a' contents="post-a-contents"]]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /b/posts]]
[%noun scry-type [title='post-b' contents="post-b-contents"]]
::
:- [%cx [[~nul %desk %da ~1234.5.8] /a/posts]]
[%noun scry-type [title='post-a' contents="post-a-contents-changed"]]
==
::
=/ scry (scry-with-results scry-results)
::
=/ post-a=schematic:ford-gate [%scry [%c %x [~nul %desk] /a/posts]]
=/ title-a=schematic:ford-gate [%ride (ream '!: title') post-a]
::
=/ post-b=schematic:ford-gate [%scry [%c %x [~nul %desk] /b/posts]]
=/ title-b=schematic:ford-gate [%ride (ream '!: title') post-b]
::
=/ sidebar=schematic:ford-gate [title-a title-b]
::
=/ rendered-a=schematic:ford-gate [post-a sidebar]
=/ rendered-b=schematic:ford-gate [post-b sidebar]
:: first, ask ford to build rendered-a
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/post-a] type=~ %build ~nul live=%.y rendered-a]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> ?=([^ ^ ~] moves)
%+ welp
%- check-post-made :*
move=i.moves
duct=~[/post-a]
type=scry-type
date=~1234.5.6
title='post-a'
contents="post-a-contents"
==
%- expect-eq !>
:_ i.t.moves
:* duct=~[/post-a] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /posts/a] [%x /posts/b] ~)]
== ==
::
=^ results2 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.7
scry=scry
::
call-args=[duct=~[/post-b] type=~ %build ~nul live=%.y rendered-b]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> ?=([^ ^ ~] moves)
%+ welp
%- check-post-made :*
move=i.moves
duct=~[/post-b]
type=scry-type
date=~1234.5.7
title='post-b'
contents="post-b-contents"
==
%- expect-eq !>
:_ i.t.moves
:* duct=~[/post-b] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /posts/a] [%x /posts/b] ~)]
== ==
::
=^ results3 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.8
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/post-a]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.8] (sy [%x /posts/a]~)]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> ?=([^ ^ ~] moves)
%+ welp
%- check-post-made :*
move=i.moves
duct=~[/post-a]
type=scry-type
date=~1234.5.8
title='post-a'
contents="post-a-contents-changed"
==
%- expect-eq !>
:_ i.t.moves
:* duct=~[/post-a] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.8] (sy [%x /posts/a] [%x /posts/b] ~)]
== ==
::
=^ results4 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.9
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.7 duct=~[/post-b]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.8] (sy [%x /posts/a]~)]
==
::
moves=~
==
::
=^ results5 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.10
scry=scry-is-forbidden
::
call-args=[duct=~[/post-a] type=~ %kill ~nul]
::
moves=~
==
::
=^ results6 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.11
scry=scry-is-forbidden
::
call-args=[duct=~[/post-b] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/post-a] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
results5
results6
(expect-ford-empty ford-gate ~nul)
==
::
++ test-alts
:- `tank`leaf+"test-alts"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /one/scry]]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /two/scry]]
~
::
:- [%cx [[~nul %home %da ~1234.5.7] /one/scry]]
~
::
:- [%cx [[~nul %home %da ~1234.5.7] /two/scry]]
`[%noun scry-type 'scry-two']
::
:- [%cx [[~nul %home %da ~1234.5.8] /one/scry]]
`[%noun scry-type 'scry-one']
==
::
=/ scry (scry-with-results-and-failures scry-results)
::
=/ scry1=schematic:ford-gate [%scry [%c %x [~nul %home] /one/scry]]
=/ scry2=schematic:ford-gate [%scry [%c %x [~nul %home] /two/scry]]
=/ alts=schematic:ford-gate [%alts [scry1 scry2 ~]]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/alts] type=~ %build ~nul live=%.y alts]
::
^= moves
:~ :* duct=~[/alts] %give %made ~1234.5.6 %complete
[%error [%leaf "%alts: all options failed"]~]
==
:* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.6
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.6] (sy [%x /scry/two] [%x /scry/one] ~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/home/~1234.5.6 duct=~[/alts]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /scry/two]~)]
==
::
^= moves
:~ :* duct=~[/alts] %give %made ~1234.5.7 %complete
%success %alts %success %scry %noun scry-type 'scry-two'
==
:* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.7
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.7] (sy [%x /scry/two] [%x /scry/one] ~)]
== == ==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/home/~1234.5.6 duct=~[/alts]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.8] (sy [%x /scry/one]~)]
==
::
^= moves
:~ :* duct=~[/alts] %give %made ~1234.5.8 %complete
%success %alts %success %scry %noun scry-type 'scry-one'
==
:* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.8
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.8] (sy [%x /scry/one] ~)]
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry-is-forbidden
::
call-args=[duct=~[/alts] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.8
%c %warp [~nul ~nul] %home ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
::
++ test-alts-and-live
:- `tank`leaf+"test-alts-and-live"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /one/scry]]
~
::
:- [%cx [[~nul %desk %da ~1234.5.6] /two/scry]]
`[%noun scry-type 'scry-two']
::
:- [%cx [[~nul %desk %da ~1234.5.7] /one/scry]]
~
::
:- [%cx [[~nul %desk %da ~1234.5.7] /two/scry]]
`[%noun scry-type 'scry-two']
::
:- [%cx [[~nul %desk %da ~1234.5.8] /one/scry]]
`[%noun scry-type 'scry-one']
==
::
=/ scry (scry-with-results-and-failures scry-results)
::
=/ scry2=schematic:ford-gate [%scry [%c %x [~nul %desk] /two/scry]]
=/ same=schematic:ford-gate [%same scry2]
:: depend on scry2 for the duration of the test
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/same] type=~ %build ~nul live=%.y same]
::
^= moves
:~ :* duct=~[/same] %give %made ~1234.5.6 %complete
%success %scry %noun scry-type 'scry-two'
==
:* duct=~[/same] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /scry/two] ~)]
== == ==
::
=/ scry1=schematic:ford-gate [%scry [%c %x [~nul %desk] /one/scry]]
=/ alts=schematic:ford-gate [%alts [scry1 scry2 ~]]
:: call the alts schematic
::
:: The alts schematic should fail to read /scry/one, and should fallback
:: to /scry/two.
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry
::
call-args=[duct=~[/alts] type=~ %build ~nul live=%.y alts]
::
^= moves
:~ :* duct=~[/alts] %give %made ~1234.5.7 %complete
%success %alts %success %scry %noun scry-type 'scry-two'
==
:* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /scry/two] [%x /scry/one] ~)]
== == ==
::
:: tell ford that /scry/one exists now
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.7 duct=~[/alts]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.8] (sy [%x /scry/one]~)]
==
::
^= moves
:~ :* duct=~[/alts] %give %made ~1234.5.8 %complete
%success %alts %success %scry %noun scry-type 'scry-one'
==
:: we subscribe to both paths because /same still exists.
::
:* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.8] (sy [%x /scry/one] ~)]
== == ==
::
:: kill the /same build
::
:: We should no longer subscribe to /scry/two in the resulting clay
:: subscription.
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.9
scry=scry
::
call-args=[duct=~[/same] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/same] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk ~
== == ==
::
=^ results5 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.10
scry=scry
::
call-args=[duct=~[/alts] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/alts] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
results5
(expect-ford-empty ford-gate ~nul)
==
::
++ test-double-alts
:- `tank`leaf+"test-double-alts"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /one/scry]]
~
:- [%cx [[~nul %desk %da ~1234.5.6] /two/scry]]
`[%noun scry-type 'scry-two']
:- [%cx [[~nul %desk %da ~1234.5.6] /three/scry]]
~
::
:- [%cx [[~nul %desk %da ~1234.5.7] /one/scry]]
~
:- [%cx [[~nul %desk %da ~1234.5.7] /two/scry]]
`[%noun scry-type 'scry-two']
:- [%cx [[~nul %desk %da ~1234.5.7] /three/scry]]
~
::
:- [%cx [[~nul %desk %da ~1234.5.8] /one/scry]]
~
:- [%cx [[~nul %desk %da ~1234.5.8] /two/scry]]
`[%noun scry-type 'scry-two']
:- [%cx [[~nul %desk %da ~1234.5.8] /three/scry]]
`[%noun scry-type 'scry-three']
::
:- [%cx [[~nul %desk %da ~1234.5.9] /one/scry]]
`[%noun scry-type 'scry-one']
:- [%cx [[~nul %desk %da ~1234.5.9] /two/scry]]
`[%noun scry-type 'scry-two-changed']
:- [%cx [[~nul %desk %da ~1234.5.9] /three/scry]]
`[%noun scry-type 'scry-three']
==
::
=/ scry (scry-with-results-and-failures scry-results)
::
=/ scry1=schematic:ford-gate [%scry [%c %x [~nul %desk] /one/scry]]
=/ scry2=schematic:ford-gate [%scry [%c %x [~nul %desk] /two/scry]]
=/ scry3=schematic:ford-gate [%scry [%c %x [~nul %desk] /three/scry]]
=/ alts1=schematic:ford-gate [%alts [scry1 scry2 ~]]
=/ alts2=schematic:ford-gate [%alts [scry3 scry2 ~]]
:: alts1 will depend on both scry1 and scry2
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/first] type=~ %build ~nul live=%.y alts1]
::
^= moves
:~ :* duct=~[/first] %give %made ~1234.5.6 %complete
%success %alts %success %scry %noun scry-type 'scry-two'
==
:* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.6
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /scry/one] [%x /scry/two] ~)]
== == ==
:: alts2 will depend on both scry3 and scry2
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry
::
call-args=[duct=~[/second] type=~ %build ~nul live=%.y alts2]
::
^= moves
:~ :* duct=~[/second] %give %made ~1234.5.7 %complete
%success %alts %success %scry %noun scry-type 'scry-two'
==
:* duct=~[/second] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.7
%c %warp [~nul ~nul] %desk ~ %mult [%da ~1234.5.7]
(sy [%x /scry/two] [%x /scry/three] ~)
== == ==
::
:: alts2 should now just return 'scry-three'
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.8
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.7 duct=~[/second]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.8] (sy [%x /scry/three]~)]
==
::
^= moves
:~ :* duct=~[/second] %give %made ~1234.5.8 %complete
%success %alts %success %scry %noun scry-type 'scry-three'
==
:* duct=~[/second] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk ~ %mult [%da ~1234.5.8]
(sy [%x /scry/three] ~)
== == ==
::
=^ results4 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.9
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk/~1234.5.6 duct=~[/first]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.9] (sy [%x /scry/one] [%x /scry/two] ~)]
==
::
^= moves
:~ :* duct=~[/first] %give %made ~1234.5.9 %complete
%success %alts %success %scry %noun scry-type 'scry-one'
==
:* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.9
%c %warp [~nul ~nul] %desk ~ %mult [%da ~1234.5.9]
(sy [%x /scry/one] ~)
== == ==
::
=^ results5 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.10
scry=scry
::
call-args=[duct=~[/first] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/first] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.9
%c %warp [~nul ~nul] %desk ~
== == ==
::
=^ results6 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.11
scry=scry
::
call-args=[duct=~[/second] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/second] %pass wire=/~nul/clay-sub/~nul/desk/~1234.5.8
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
results5
results6
(expect-ford-empty ford-gate ~nul)
==
:: +test-cache-reclamation-trivial: reclaim cache on a blank slate ford
::
++ test-cache-reclamation-trivial
:- `tank`leaf+"test-cache-reclamation-trivial"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
:: send a pinned literal, expects a %made response with pinned literal
::
^= call-args
[duct=~[/trivial] type=~ %build ~nul live=%.n [%$ %noun !>(**)]]
::
^= moves
:~ :* duct=~[/trivial] %give %made ~1234.5.6
%complete %success %$ %noun !>(**)
== ==
==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
:: ask ford to wipe its cache
::
call-args=[duct=~[/trivial] type=~ %wipe ~]
:: cache wiping should never produce any moves
::
moves=~
==
::
;: welp
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-cache-reclamation-live-rebuild
:- `tank`leaf+"test-cache-reclamation-live-rebuild"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-succeed ~1234.5.6 [%noun !>(42)])
::
^= call-args
:* duct=~[/build] type=~ %build ~nul live=%.y
[%scry %c care=%x rail=[[~nul %desk] /bar/foo]]
==
::
^= moves
:~ :* duct=~[/build] %give %made ~1234.5.6 %complete %success
[%scry %noun !>(42)]
==
:* duct=~[/build] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar]~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
:: ask ford to wipe its cache
::
call-args=[duct=~[/build] type=~ %wipe ~]
:: cache wiping should never produce any moves
::
moves=~
==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=(scry-succeed ~1234.5.7 [%noun !>(43)])
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk duct=~[/build]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/build] %give %made ~1234.5.7 %complete %success
[%scry %noun !>(43)]
==
:* duct=~[/build] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar]~)]
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/build] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/build] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
::
++ test-cache-reclamation-live-promote
:- `tank`leaf+"test-cache-reclamation-live-promote"
::
=/ scry-type=type [%atom %tas ~]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /bar/foo]]
[%noun scry-type %it-doesnt-matter]
::
:- [%cx [[~nul %desk %da ~1234.5.7] /bar/foo]]
[%noun scry-type %changed]
==
::
=/ scry (scry-with-results scry-results)
::
=/ formula=hoon (ream '`@tas`%constant')
=/ subject-schematic=schematic:ford-gate
[%scry %c %x [~nul %desk] /bar/foo]
::
=/ ride=schematic:ford-gate [%ride formula subject-schematic]
=/ same=schematic:ford-gate [%same ride]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/ride] type=~ %build ~nul live=%.y same]
::
^= moves
:~ :* duct=~[/ride] %give %made ~1234.5.6 %complete
[%success [%ride scry-type %constant]]
==
:* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.7
scry=scry-is-forbidden
:: ask ford to wipe its cache
::
call-args=[duct=~[/ride] type=~ %wipe ~]
:: cache wiping should never produce any moves
::
moves=~
==
::
=^ results3 ford-gate
%- test-ford-take :*
ford-gate
now=~1234.5.7
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk duct=~[/ride]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.7] (sy [%x /foo/bar]~)]
==
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.7] (sy [%x /foo/bar] ~)]
== == ==
::
=^ results4 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/ride] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/ride] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
(expect-ford-empty ford-gate ~nul)
==
:: tests that doing a cache reclamation during the five-oh-fora rebuild works
::
++ test-five-oh-cache-reclamation
:- `tank`leaf+"test-five-oh-cache-reclamation"
::
=/ scry-type=type
[%cell [%face [~ %title] [%atom %tas ~]] [%face [~ %contents] -:!>("")]]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /a/posts]]
[%noun scry-type [title='post-a' contents="post-a-contents"]]
::
:- [%cx [[~nul %desk %da ~1234.5.6] /b/posts]]
[%noun scry-type [title='post-b' contents="post-b-contents"]]
::
:- [%cx [[~nul %desk %da ~1234.5.9] /a/posts]]
[%noun scry-type [title='post-a' contents="post-a-contents-changed"]]
::
:: unchanged, but might be requested if cache entry gets wiped
::
:- [%cx [[~nul %desk %da ~1234.5.9] /b/posts]]
[%noun scry-type [title='post-b' contents="post-b-contents"]]
==
::
=/ scry (scry-with-results scry-results)
::
=/ post-a=schematic:ford-gate [%scry [%c %x [~nul %desk] /a/posts]]
=/ title-a=schematic:ford-gate [%ride (ream '!: title') post-a]
::
=/ post-b=schematic:ford-gate [%scry [%c %x [~nul %desk] /b/posts]]
=/ title-b=schematic:ford-gate [%ride (ream '!: title') post-b]
::
=/ sidebar=schematic:ford-gate [title-a title-b]
::
=/ rendered-a=schematic:ford-gate [post-a sidebar]
=/ rendered-b=schematic:ford-gate [post-b sidebar]
:: first, ask ford to build rendered-a
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry
::
call-args=[duct=~[/post-a] type=~ %build ~nul live=%.y rendered-a]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> ?=([^ ^ ~] moves)
%+ welp
%- check-post-made :*
move=i.moves
duct=~[/post-a]
type=scry-type
date=~1234.5.6
title='post-a'
contents="post-a-contents"
==
%- expect-eq !>
:_ i.t.moves
:* duct=~[/post-a] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk
`[%mult [%da ~1234.5.6] (sy [%x /posts/a] [%x /posts/b] ~)]
== ==
::
=^ results2 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.7
scry=scry
::
call-args=[duct=~[/post-b] type=~ %build ~nul live=%.y rendered-b]
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> ?=([^ ~] moves)
%- check-post-made :*
move=i.moves
duct=~[/post-b]
type=scry-type
date=~1234.5.7
title='post-b'
contents="post-b-contents"
== ==
::
=^ results3 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.8
scry=scry-is-forbidden
::
call-args=[duct=~[/wipe] type=~ %wipe ~]
moves=~
==
::
=^ results4 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.9
scry=scry
::
^= take-args
:* wire=/~nul/clay-sub/~nul/desk duct=~[/post-a]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.9] (sy [%x /posts/a]~)]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
=+ length=(lent moves)
:: deal with mug ordering
::
:: This test depends on the mugs of types stored in ford, which is
:: dependent on the parse tree of this file. There are two valid
:: responses, one where we send a spurious move about %post-b
:: because it was the entry which was evicted from the cache and one
:: where we don't because it wasn't. Check both cases.
::
?: =(length 2)
:: the simple case where we don't send a spurious post-b %made
::
?> ?=([^ ^ ~] moves)
::
%- check-post-made :*
move=i.moves
duct=~[/post-a]
type=scry-type
date=~1234.5.9
title='post-a'
contents="post-a-contents-changed"
==
:: the complex case
::
:: Not only do we send a spurious %made, we don't have a set order
:: that these events happen in, so check both ways.
::
?> ?=([^ ^ ^ ~] moves)
::
=/ post-a-first=tang
%+ welp
%- check-post-made :*
move=i.moves
duct=~[/post-a]
type=scry-type
date=~1234.5.9
title='post-a'
contents="post-a-contents-changed"
==
%- check-post-made :*
move=i.t.moves
duct=~[/post-b]
type=scry-type
date=~1234.5.9
title='post-b'
contents="post-b-contents"
==
:: if we got a ~ for post-a-first, everything is fine
::
?~ post-a-first
~
:: otherwise, its either post-b first or an error.
::
:: Either way, return post-b first check.
::
%+ welp
%- check-post-made :*
move=i.moves
duct=~[/post-b]
type=scry-type
date=~1234.5.9
title='post-b'
contents="post-b"
==
::
%- check-post-made :*
move=i.t.moves
duct=~[/post-a]
type=scry-type
date=~1234.5.9
title='post-a'
contents="post-a-contents-changed"
== ==
::
=^ results5 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.10
scry=scry-is-forbidden
::
call-args=[duct=~[/post-b] type=~ %kill ~nul]
moves=~
==
::
=^ results6 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.11
scry=scry-is-forbidden
::
call-args=[duct=~[/post-a] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/post-a] %pass wire=/~nul/clay-sub/~nul/desk
%c %warp [~nul ~nul] %desk ~
== == ==
::
;: weld
results1
results2
results3
results4
results5
results6
(expect-ford-empty ford-gate ~nul)
==
::
++ test-reef
:- `tank`leaf+"test-reef"
::
=/ hoon-beam-path=path (en-beam:format [bek /hoon/hoon/sys])
=/ hoon-txt=@t .^(@t %cx hoon-beam-path)
=/ hoon-parsed=hoon (rain hoon-beam-path hoon-txt)
~& %parsed-hoon
::
=/ arvo-beam-path=path (en-beam:format [bek /hoon/arvo/sys])
=/ arvo-txt=@t .^(@t %cx arvo-beam-path)
=/ arvo-parsed=hoon (rain arvo-beam-path arvo-txt)
~& %parsed-arvo
::
=/ zuse-beam-path=path (en-beam:format [bek /hoon/zuse/sys])
=/ zuse-txt=@t .^(@t %cx zuse-beam-path)
=/ zuse-parsed=hoon (rain zuse-beam-path zuse-txt)
~& %parsed-zuse
::
=/ pit=vase !>(~)
=/ hoon-compiled=vase (slap pit hoon-parsed)
~& %hoon-compiled
=/ arvo-compiled=vase (slap hoon-compiled arvo-parsed)
~& %arvo-compiled
=/ zuse-compiled=vase (slap arvo-compiled zuse-parsed)
~& %zuse-compiled
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %base %da ~1234.5.6] /hoon/hoon/sys]]
[%noun !>(hoon-txt)]
::
:- [%cx [[~nul %base %da ~1234.5.6] /hoon/arvo/sys]]
[%noun !>(arvo-txt)]
::
:- [%cx [[~nul %base %da ~1234.5.6] /hoon/zuse/sys]]
[%noun !>(zuse-txt)]
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/reef] type=~ %build ~nul live=%.n
[%reef [~nul %base]]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made *] i.moves)
=/ result result.p.card.i.moves
?> ?=(%complete -.result)
?> ?=([%success %reef *] +.result)
::
=/ kernel=vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- (en-beam:format *beam)
q:(slym (slap (slap kernel [%limb %format]) [%limb %en-beam]) *beam)
::
%- expect-eq !>
:- &
(slab %format p.kernel)
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-reef-short-circuit
:- `tank`leaf+"test-reef-short-circuit"
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
^= scry
|= [* * =term =beam]
^- (unit (unit cage))
::
~| [term=term beam=beam]
?> =(%cw term)
?> =([[~nul %home [%da ~1234.5.6]] /hoon/hoon/sys] beam)
::
``[%cass !>(`cass:clay`[ud=1 da=~1234.5.6])]
::
^= call-args
:* duct=~[/reef] type=~ %build ~nul live=%.n
[%reef [~nul %home]]
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made *] i.moves)
=/ result result.p.card.i.moves
?> ?=(%complete -.result)
?> ?=([%success %reef *] +.result)
::
=/ kernel=vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- (en-beam:format *beam)
q:(slym (slap (slap kernel [%limb %format]) [%limb %en-beam]) *beam)
::
%- expect-eq !>
:- &
(slab %format p.kernel)
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-path
:- `tank`leaf+"test-path"
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %desk %da ~1234.5.6] /hoon/bar/foo/lib]]
`[%hoon !>(*hoon)]
::
:- [%cx [[~nul %desk %da ~1234.5.6] /hoon/foo-bar/lib]]
~
==
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%path disc=[~nul %desk] prefix='lib' raw-path='foo-bar']
==
::
^= moves
:~ :* duct=~[/path] %give %made ~1234.5.6 %complete
%success %path [[~nul %desk] /hoon/bar/foo/lib]
== == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-plan-hoon
:- `tank`leaf+"test-plan-hoon"
::
=/ =hoon (ream '`@tas`%constant')
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
^= call-args
:* duct=~[/plan] type=~ %build ~nul live=%.n
%plan
source-path=[[~nul %home] /bar/foo]
query-string=`coin`[%$ *dime]
source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
cranes=~
sources=[hoon]~
==
::
^= comparator
|= moves=(list move:ford-gate)
^- tang
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made *] i.moves)
=/ result result.p.card.i.moves
?> ?=(%complete -.result)
?> ?=([%success %plan *] +.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(*@tas))
::
%- expect-eq !>
[%constant q.vase]
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core
:- `tank`leaf+"test-core"
::
=/ hoon-src '`@tas`%constant'
=/ hoon-src-type=type [%atom %$ ~]
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo-bar/lib]]
[%hoon hoon-src-type hoon-src]
==
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/foo-bar/lib]]
==
::
^= moves
:~ :* duct=~[/path] %give %made ~1234.5.6 %complete
%success %core [%atom %tas ~] %constant
== == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-linker
:- `tank`leaf+"test-core-linker"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/data/sur]]
:- %hoon
:- hoon-src-type
'''
|%
+= data-type
[msg=tape count=@ud]
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/data/lib]]
:- %hoon
:- hoon-src-type
'''
/- data
|%
++ do
|= [a=data-type:data b=data-type:data]
^- data-type:data
[(weld msg.a msg.b) (add count.a count.b)]
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/- *data
/+ combiner=data
(do:combiner `data-type`["one" 1] `data-type`["two" 2])
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- ["onetwo" 3]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(["onetwo" 3]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-multi-hoon
:- `tank`leaf+"test-core-multi-hoon"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
|%
+= data-type
[msg=tape count=@ud]
--
|%
++ data
^- data-type
["one" 1]
--
data
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- ["one" 1]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(["one" 1]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fsts-fssg
:- `tank`leaf+"test-core-fsts-fssg"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= one /~ `@u`1
/= two /~ `@u`2
(add one two)
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- 3
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([3]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fsdt-fskt
:- `tank`leaf+"test-core-fsdt-fskt"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /^ (list @ud)
/. /~ 1
/~ 2
/~ 3
==
(weld data [4 5 ~])
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [1 2 3 4 5 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([1 2 3 4 5 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fskt-nest-fail
:- `tank`leaf+"test-core-fskt-nest-fail"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /^ (list @u)
/~ 5
data
'''
==
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= moves
:~ :* duct=~[/path] %give %made ~1234.5.6 %complete %error
:~ [%leaf "ford: %core failed: "]
[%leaf "/^ failed: nest-fail"]
== == == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fssm
:- `tank`leaf+"test-core-fssm"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /; |=(a=@u [a a ~])
/~ 5
data
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [5 5 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([5 5 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fsbr
:- `tank`leaf+"test-core-fsbr"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /| /^ (list @u)
/~ 5
::
/^ (list @u)
/~ [6 6 ~]
==
data
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [6 6 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([6 6 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fsbr-out-of-options
:- `tank`leaf+"test-core-fsbr-out-of-options"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /| /^ (list @u)
/~ 5
::
/^ @u
/~ [6 6 ~]
==
data
'''
==
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= moves
:~ :* duct=~[/path] %give %made ~1234.5.6 %complete %error
:~ [%leaf "ford: %core failed: "]
[%leaf "/| failed: out of options"]
== == == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-plan-fszp-as-noun
:- `tank`leaf+"test-plan-fszp-as-noun"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /!noun/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/other/lib]]
:- %hoon
:- hoon-src-type
'''
[1 2 3 ~]
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:* %plan [[~nul %home] /other/lib] *coin
:* source-rail=[[~nul %desk] /bar/foo]
zuse-version=309
structures=~
libraries=~
cranes=[%fsts %data [%fszp %noun]]~
sources=[%wing [%data]~]~
== == ==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %plan *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [1 2 3 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([1 2 3 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fszp-as-mark
:- `tank`leaf+"test-core-fszp-as-mark"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /: /===/lib/other
/!somemark/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/somemark/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [word=tape num=@]
++ grab
|%
+= noun [tape @]
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/other/lib]]
:- %hoon
:- hoon-src-type
'''
["five" 5]
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
%core [[~nul %home] /hoon/program/gen]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- ["five" 5]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(["five" 5]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fscl-fszp
:- `tank`leaf+"test-core-fscl-fszp"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /: /===/data
/!noun/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/data]]
:- %hoon
:- hoon-src-type
'''
[1 2 3 ~]
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [1 2 3 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([1 2 3 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fscm
:- `tank`leaf+"test-core-fscm"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /: /===/data
/!noun/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/data]]
:- %hoon
:- hoon-src-type
'''
/, /other
/~ a=[3 2 1 ~]
::
/data
/~ a=[1 2 3 ~]
==
a
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [1 2 3 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([1 2 3 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-plan-fsbc
:- `tank`leaf+"test-plan-fsbc"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/other/lib]]
:- %hoon
:- hoon-src-type
'''
/= data /$ %+ cork fuel:html
|= gas/epic:eyre
[bem.gas (~(got by qix.gas) 'key')]
data
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:* %plan [[~nul %home] /other/lib]
:~ %many
[%blob *cred:eyre]
[%$ [%t %key]]
[%$ [%t %value]]
[%$ %n ~]
==
:* source-rail=[[~nul %home] /hoon/other/lib]
zuse-version=309
structures=~
libraries=~
cranes=[%fsts %data [%fszp %noun]]~
sources=`(list hoon)`[[%wing [%data]~] ~]
== == ==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %plan *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [[[~nul %home [%da ~1234.5.6]] /other/lib] %value]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([*beam *@tas]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fscb
:- `tank`leaf+"test-core-fscb"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /: /===/data
/_ /!noun/
data
'''
::
:- [%cy [[~nul %home %da ~1234.5.6] /data]]
:- %arch
:- arch-type
:- ~
(my ~[[~.one ~] [~.two ~] [~.hoon ~]])
::
:- [%cy [[~nul %home %da ~1234.5.6] /one/data]]
:- %arch
:- arch-type
:- ~
(my ~[[~.hoon ~]])
::
:- [%cy [[~nul %home %da ~1234.5.6] /two/data]]
:- %arch
:- arch-type
:- ~
(my ~[[~.hoon ~]])
::
:: this "hoon" file should be filtered out
::
:- [%cy [[~nul %home %da ~1234.5.6] /hoon/data]]
:- %arch
:- arch-type
:- fil=[~ u=0v6]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/one/data]]
:- %hoon
:- hoon-src-type
'''
1
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/two/data]]
:- %hoon
:- hoon-src-type
'''
2
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%core source-path=`rail:ford-gate`[[~nul %home] /hoon/program/gen]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- (my [[%one 1] [%two 2] ~])
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(*[[@ta @ud] [[@ta @ud] ~ ~] ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fspm
:- `tank`leaf+"test-core-fspm"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- ~
:- %hoon
:- hoon-src-type
'''
/= data /&second&first&/~["four" 5 "six"]
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/first/mar]]
:- ~
:- %hoon
:- hoon-src-type
'''
|_ [word=tape num=@]
++ grab
|%
++ noun |=([a=tape b=@ c=tape] [a b])
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/second/mar]]
:- ~
:- %hoon
:- hoon-src-type
'''
|_ num=@
++ grab
|%
++ first |=([a=tape b=@] b)
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/noun/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
%core [[~nul %home] /hoon/program/gen]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- 5
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(5))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-core-fszy-renderer
:- `tank`leaf+"test-core-fszy-renderer"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/program/gen]]
:- %hoon
:- hoon-src-type
'''
/= data /: /===/data
/foo/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/ren]]
:- %hoon
:- hoon-src-type
'''
/= data /!noun/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/data]]
:- %hoon
:- hoon-src-type
'''
[1 2 3 ~]
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
%core [[~nul %home] /hoon/program/gen]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %core *] build-result.result)
::
=/ =vase vase.build-result.result
::
%+ weld
%- expect-eq !>
:- [1 2 3 ~]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([1 2 3 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-bunt
:- `tank`leaf+"test-bunt"
::
=/ hoon-src=@ta
'''
|_ cell=^
++ grab
|%
++ noun ^
--
--
'''
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
[%hoon !>(hoon-src)]
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%bunt [~nul %home] %foo]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %bunt *] build-result.result)
::
=/ =vase q.cage.build-result.result
::
%+ weld
%- expect-eq !>
:- [0 0]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(*^))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-volt
:- `tank`leaf+"test-volt"
::
=/ hoon-src=@ta
'''
|_ cell=^
++ grab
|%
++ noun ^
--
--
'''
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
[%hoon !>(hoon-src)]
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%volt [~nul %home] %foo [12 13]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %volt *] build-result.result)
::
=/ =vase q.cage.build-result.result
::
%+ weld
%- expect-eq !>
:- [12 13]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(*^))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-vale
:- `tank`leaf+"test-vale"
::
=/ hoon-src=@ta
'''
|_ cell=^
++ grab
|%
++ noun ^
--
--
'''
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
[%hoon !>(hoon-src)]
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%vale [~nul %home] %foo [12 13]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %vale *] build-result.result)
::
=/ =vase q.cage.build-result.result
::
%+ weld
%- expect-eq !>
:- [12 13]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(*^))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-vale-error
:- `tank`leaf+"test-vale-error"
::
=/ hoon-src=@ta
'''
|_ cell=^
++ grab
|%
++ noun ^
--
--
'''
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
[%hoon !>(hoon-src)]
==
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%vale [~nul %home] %foo 42]
==
::
^= moves
:~ :* duct=~[/path] %give %made ~1234.5.6 %complete %error
:- %leaf
%+ weld
"ford: %vale failed: invalid input for mark: "
"/~nul/home/~1234.5.6/mar/foo/hoon"
~
== == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-cast
:- `tank`leaf+"test-cast"
::
=/ foo-mark-src=@ta
'''
|_ cell=^
++ grab
|%
++ bar ^
--
--
'''
::
=/ bar-mark-src=@ta
'''
|_ sample=[@ @]
++ grab
|%
+= noun [@ @]
--
--
'''
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
`[%hoon hoon-src-type foo-mark-src]
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/bar/mar]]
`[%hoon hoon-src-type bar-mark-src]
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/noun/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%cast [~nul %home] %foo [%vale [~nul %home] %bar [12 13]]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %cast *] build-result.result)
::
=/ mark=term p.cage.build-result.result
=/ =vase q.cage.build-result.result
::
;: welp
%- expect-eq !>
:- %foo
mark
::
%- expect-eq !>
:- [12 13]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(*^))
== ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-cast-grow
:- `tank`leaf+"test-cast-grow"
::
=/ foo-mark-src=@ta
'''
|_ cell=^
++ grab
|%
++ noun ^
--
--
'''
::
=/ bar-mark-src=@ta
'''
|_ sample=[@ @]
++ grab
|%
+= noun [@ @]
--
++ grow
|%
++ foo sample
--
--
'''
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
`[%hoon hoon-src-type foo-mark-src]
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/bar/mar]]
`[%hoon hoon-src-type bar-mark-src]
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/noun/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%cast [~nul %home] %foo [%vale [~nul %home] %bar [12 13]]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %cast *] build-result.result)
::
=/ mark=term p.cage.build-result.result
=/ =vase q.cage.build-result.result
::
;: welp
%- expect-eq !>
:- %foo
mark
::
%- expect-eq !>
:- [12 13]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([12 13]))
== ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-mute
:- `tank`leaf+"test-mute"
::
=/ atom-type=type [%atom %$ ~]
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
%mute subject=[%$ %foo !>([a=42 b=[43 c=44]])]
^= mutations ^- (list [wing schematic:ford-gate])
:~
[~[%a] [%$ %noun atom-type 2]]
[~[%c %b] [%$ %noun atom-type 4]]
== ==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %mute *] build-result.result)
::
=/ mark=term p.cage.build-result.result
=/ =vase q.cage.build-result.result
::
;: welp
%- expect-eq !>
:- %foo
mark
::
%- expect-eq !>
:- [2 43 4]
q.vase
::
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>([2 43 4]))
== ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-bake-renderer
:- `tank`leaf+"test-bake-renderer"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/ren]]
:- %hoon
:- hoon-src-type
'''
/= data /!noun/
data
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/data]]
:- %hoon
:- hoon-src-type
'''
[1 2 3 ~]
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%bake %foo *coin `rail:ford-gate`[[~nul %home] /data]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %bake *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %noun
p.cage
::
%+ weld
%- expect-eq !>
:- [1 2 3 ~]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>([1 2 3 ~]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-bake-mark
:- `tank`leaf+"test-bake-mark"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ cell=^
++ grab
|%
++ bar ^
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/bar/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ sample=[@ @]
++ grab
|%
+= noun [@ @]
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/ren]]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /bar/data]]
`[%bar !>([12 13])]
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/noun/mar]]
~
::
:- [%cy [[~nul %home %da ~1234.5.6] /data]]
`[%arch !>(`arch`[fil=~ dir=(my [%bar ~]~)])]
::
:- [%cy [[~nul %home %da ~1234.5.6] /bar/data]]
`[%arch !>(`arch`[fil=`*@uv dir=~])]
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
[%bake %foo *coin `rail:ford-gate`[[~nul %home] /data]]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %bake *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %foo
p.cage
::
%+ weld
%- expect-eq !>
:- [12 13]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>([12 13]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-diff
:- `tank`leaf+"test-diff"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
:+ %hoon hoon-src-type
'''
|_ cell=^
++ grab
|%
++ noun ^
--
++ grad
|%
++ diff |=(^ +<)
++ form %foo
--
--
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:^ %diff [~nul %home]
[%$ %foo !>([12 13])]
[%$ %foo !>([17 18])]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %diff *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %foo
p.cage
::
%+ weld
%- expect-eq !>
:- [17 18]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>([17 18]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-diff-form
:- `tank`leaf+"test-diff-form"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ txt=wain
++ grab
|%
++ noun wain
--
++ grad
|%
++ form %txt-diff
++ diff
|= other-txt=wain
^- (urge:clay cord)
=, differ
(lusk txt other-txt (loss txt other-txt))
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt-diff/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ txt-diff=(urge:clay cord)
++ grab
|%
++ noun (urge:clay cord)
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/diff/txt/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:^ %diff [~nul %home]
[%$ %txt !>(~[%a %b])]
[%$ %txt !>(~[%a %d])]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %diff *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %txt-diff
p.cage
::
%+ weld
%- expect-eq !>
:- ~[[%& 1] [%| ~[%b] ~[%d]]]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>(~[[%& 1] [%| ~[%b] ~[%d]]]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-pact
:- `tank`leaf+"test-pact"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ txt=wain
++ grab
|%
++ noun wain
--
++ grad
|%
++ form %txt-diff
++ diff
|= other-txt=wain
^- (urge:clay cord)
=, differ
(lusk txt other-txt (loss txt other-txt))
++ pact
|= diff=(urge:clay cord)
^- wain
=, differ
(lurk txt diff)
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt-diff/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ txt-diff=(urge:clay cord)
++ grab
|%
++ noun (urge:clay cord)
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/diff/txt/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:^ %pact [~nul %home]
[%$ %txt !>(~[%a %b])]
[%$ %txt-diff !>(~[[%& 1] [%| ~[%b] ~[%d]]])]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %pact *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %txt
p.cage
::
%+ weld
%- expect-eq !>
:- ~[%a %d]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>(~[%a %d]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-pact-mark
:- `tank`leaf+"test-pact-mark"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ txt=wain
++ grab
|%
++ noun wain
--
++ grad
|%
++ form %txt-diff
++ diff
|= other-txt=wain
^- (urge:clay cord)
=, differ
(lusk txt other-txt (loss txt other-txt))
++ pact
|= diff=(urge:clay cord)
^- wain
=, differ
(lurk txt diff)
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/foo/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ foo=@t
++ grab
|%
++ noun @t
++ txt of-wain:format
--
++ grow
|%
++ txt (to-wain:format foo)
--
++ grad %txt
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt-diff/mar]]
:^ ~ %hoon hoon-src-type
'''
|_ txt-diff=(urge:clay cord)
++ grab
|%
++ noun (urge:clay cord)
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/diff/txt/mar]]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/noun/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:^ %pact [~nul %home]
:+ %$ %foo !>
'''
a
b
'''
[%$ %txt-diff !>(~[[%& 1] [%| ~[%b] ~[%d]]])]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %pact *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %foo
p.cage
::
%+ weld
%- expect-eq !>
:- '''
a
d
'''
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>(''))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-join
:- `tank`leaf+"test-join"
::
=/ hoon-src-type=type [%atom %$ ~]
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt/mar]]
:^ ~ %hoon hoon-src-type
.^(@t %cx (en-beam:format [bek /hoon/txt/mar]))
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt-diff/mar]]
:^ ~ %hoon hoon-src-type
.^(@t %cx (en-beam:format [bek /hoon/txt-diff/mar]))
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/diff/txt/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
:^ %join [~nul %home] %txt
:: replace %a with %c on the first line
::
:- [%$ %txt-diff !>(~[[%| ~[%a] ~[%c]] [%& 1]])]
:: replace %b with %d on the second line
::
[%$ %txt-diff !>(~[[%& 1] [%| ~[%b] ~[%d]]])]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %join *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %txt-diff
p.cage
::
%+ weld
%- expect-eq !>
:- ~[[%| ~[%a] ~[%c]] [%| ~[%b] ~[%d]]]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>(*(urge:clay cord)))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-list
:- `tank`leaf+"test-list"
::
=/ ud-type=type [%atom %ud ~]
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
^= call-args
:* duct=~[/count] type=~ %build ~nul live=%.n
%list
:~ [%$ %noun ud-type 1]
[%$ %noun ud-type 2]
[%$ %noun ud-type 3]
== ==
::
^= moves
:~ :* duct=~[/count] %give %made ~1234.5.6 %complete
%success %list
:~ [%success %$ %noun ud-type 1]
[%success %$ %noun ud-type 2]
[%success %$ %noun ud-type 3]
== == == ==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
::
++ test-mash
:- `tank`leaf+"test-mash"
::
=/ hoon-src-type=type [%atom %$ ~]
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt/mar]]
:^ ~ %hoon hoon-src-type
.^(@t %cx (en-beam:format [bek /hoon/txt/mar]))
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/txt-diff/mar]]
:^ ~ %hoon hoon-src-type
.^(@t %cx (en-beam:format [bek /hoon/txt-diff/mar]))
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/diff/txt/mar]]
~
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/path] type=~ %build ~nul live=%.n
^- schematic:ford-gate
:- %mash
:^ [~nul %home] %txt
:: replace %a with %c on the first line
::
^= first
:+ [~nul %home] %txt-diff
^- schematic:ford-gate
[%$ %txt-diff !>(~[[%| ~[%a] ~[%c]] [%& 1]])]
:: replace %b with %d on the second line
::
^= second
:+ [~nul %home] %txt-diff
^- schematic:ford-gate
[%$ %txt-diff !>(~[[%& 1] [%| ~[%b] ~[%d]]])]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=(^ moves)
?> ?=([* %give %made @da %complete *] i.moves)
=/ result result.p.card.i.moves
?> ?=([%success %mash *] build-result.result)
::
=/ =cage cage.build-result.result
::
%+ weld
%- expect-eq !>
:- %txt-diff
p.cage
::
%+ weld
%- expect-eq !>
:- ~[[%| ~[%a] ~[%c]] [%| ~[%b] ~[%d]]]
q.q.cage
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage) | -:!>(*(urge:clay cord)))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
:: tests multiple cores depending on a rich dependency tree
::
:: Test why multiple app cores don't receive dependencies
::
++ test-multi-core-same-dependency
:- `tank`leaf+"test-multi-core-same-dependency"
::
=/ hoon-src-type=type [%atom %$ ~]
::
=/ scry-results=(map [term beam] (unit cage))
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/gh/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-two:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/gh/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-gh-one=1 sur-gh-two=2 sur-gh-three=3]
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/plan-acct/sur]]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/acct/plan/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-plan-acct=1 sur-plan-acct=2]
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/lib/old/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/old-lib/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
[old-lib-val=10 ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/parse/gh/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/gh-parse/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-gh-parse-val=(add old-lib-val sur-gh-three:gh) ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/connector/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-connector-val=(add old-lib-val sur-gh-one:gh) ~]
'''
==
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/gh] type=~ %build ~nul live=%.y
%core [[~nul %home] /hoon/gh/app]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %core *] i.moves)
::
=/ =vase vase.build-result.result.p.card.i.moves
::
%+ weld
%- expect-eq !>
:- 13
q.vase
::
%+ weld
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(13))
::
=/ files=(set [%x path])
%- sy :~
[%x /lib/old-lib/hoon]
[%x /sur/gh/hoon]
[%x /sur/plan-acct/hoon]
[%x /sur/plan/acct/hoon]
[%x /lib/old/lib/hoon]
[%x /app/gh/hoon]
[%x /lib/gh/parse/hoon]
[%x /lib/gh-parse/hoon]
[%x /lib/connector/hoon]
==
::
%- expect-eq !>
:_ i.t.moves
^- move:ford-gate
:* duct=~[/gh] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.6
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.6] files]
==
==
:: add a gh2 app which is the same as gh; move dates forward
::
:: gh2 is the same except for adding one instead of two.
=. scry-results
%- my :~
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/gh/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-two:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/gh2/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-one:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/gh/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-gh-one=1 sur-gh-two=2 sur-gh-three=3]
'''
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/plan-acct/sur]]
~
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/acct/plan/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-plan-acct=1 sur-plan-acct=2]
'''
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/lib/old/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/old-lib/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
[old-lib-val=10 ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/parse/gh/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/gh-parse/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-gh-parse-val=(add old-lib-val sur-gh-three:gh) ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.7] /hoon/connector/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-connector-val=(add old-lib-val sur-gh-one:gh) ~]
'''
==
::
=^ results2 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.7
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/gh2] type=~ %build ~nul live=%.y
%core [[~nul %home] /hoon/gh2/app]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %core *] i.moves)
::
=/ =vase vase.build-result.result.p.card.i.moves
::
%+ weld
%- expect-eq !>
:- 12
q.vase
::
%+ weld
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(12))
::
=/ files=(set [%x path])
%- sy :~
[%x /lib/old-lib/hoon]
[%x /sur/gh/hoon]
[%x /sur/plan-acct/hoon]
[%x /sur/plan/acct/hoon]
[%x /lib/old/lib/hoon]
[%x /app/gh2/hoon]
[%x /lib/gh/parse/hoon]
[%x /lib/gh-parse/hoon]
[%x /lib/connector/hoon]
==
::
%- expect-eq !>
:_ i.t.moves
^- move:ford-gate
:* duct=~[/gh2] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.7
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.7] files]
==
==
::
:: add a gh3 app which is the same as gh; move dates forward
::
:: gh3 is the same except for adding zero instead of two.
=. scry-results
%- my :~
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/gh/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-two:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/gh2/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-one:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/gh3/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add 0 lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/gh/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-gh-one=1 sur-gh-two=2 sur-gh-three=3]
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/plan-acct/sur]]
~
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/acct/plan/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-plan-acct=1 sur-plan-acct=2]
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/lib/old/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/old-lib/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
[old-lib-val=10 ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/parse/gh/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/gh-parse/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-gh-parse-val=(add old-lib-val sur-gh-three:gh) ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.8] /hoon/connector/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-connector-val=(add old-lib-val sur-gh-one:gh) ~]
'''
==
::
=^ results3 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.8
scry=(scry-with-results-and-failures scry-results)
::
^= call-args
:* duct=~[/gh3] type=~ %build ~nul live=%.y
%core [[~nul %home] /hoon/gh3/app]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %core *] i.moves)
::
=/ =vase vase.build-result.result.p.card.i.moves
::
%+ weld
%- expect-eq !>
:- 11
q.vase
::
%+ weld
%- expect-eq !>
:- &
(~(nest ut p.vase) | -:!>(11))
::
=/ files=(set [%x path])
%- sy :~
[%x /lib/old-lib/hoon]
[%x /sur/gh/hoon]
[%x /sur/plan-acct/hoon]
[%x /sur/plan/acct/hoon]
[%x /lib/old/lib/hoon]
[%x /app/gh3/hoon]
[%x /lib/gh/parse/hoon]
[%x /lib/gh-parse/hoon]
[%x /lib/connector/hoon]
==
::
%- expect-eq !>
:_ i.t.moves
^- move:ford-gate
:* duct=~[/gh3] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.8
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.8] files]
==
==
::
:: change the implementation of /lib/connector/hoon
::
=. scry-results
%- my :~
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/gh/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-two:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/gh2/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add sur-gh-one:gh lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/gh3/app]]
:- ~
:- %hoon
:- hoon-src-type
'''
/? 314
/- gh, plan-acct
/+ gh-parse, connector
::
(add 0 lib-connector-val:connector)
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/gh/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-gh-one=1 sur-gh-two=2 sur-gh-three=3]
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/plan-acct/sur]]
~
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/acct/plan/sur]]
:- ~
:- %hoon
:- hoon-src-type
'''
[sur-plan-acct=1 sur-plan-acct=2]
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/lib/old/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/old-lib/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
[old-lib-val=10 ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/parse/gh/lib]]
~
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/gh-parse/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-gh-parse-val=(add old-lib-val sur-gh-three:gh) ~]
'''
::
:- [%cx [[~nul %home %da ~1234.5.9] /hoon/connector/lib]]
:- ~
:- %hoon
:- hoon-src-type
'''
/- gh
/+ old-lib
=, old-lib
[lib-connector-val=(add old-lib-val 5) ~]
'''
==
::
=^ results4 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.9
scry=(scry-with-results-and-failures scry-results)
::
^= take-args
:* wire=/~nul/clay-sub/~nul/home/~1234.5.6 duct=~[/gh]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.9] (sy [%x /lib/connector/hoon]~)]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %core *] i.moves)
::
=/ =vase vase.build-result.result.p.card.i.moves
::
=/ files=(set [%x path])
%- sy :~
[%x /lib/old-lib/hoon]
[%x /sur/gh/hoon]
[%x /sur/plan-acct/hoon]
[%x /sur/plan/acct/hoon]
[%x /lib/old/lib/hoon]
[%x /app/gh/hoon]
[%x /lib/gh/parse/hoon]
[%x /lib/gh-parse/hoon]
[%x /lib/connector/hoon]
==
::
;: weld
(expect-eq !>([~[/gh] duct.i.moves]))
(compare-vase !>(17) vase.build-result.result.p.card.i.moves)
::
%- expect-eq !>
:_ i.t.moves
^- move:ford-gate
:* duct=~[/gh] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.9
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.9] files]
==
== ==
::
=^ results5 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.9
scry=(scry-with-results-and-failures scry-results)
::
^= take-args
:* wire=/~nul/clay-sub/~nul/home/~1234.5.7 duct=~[/gh2]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.9] (sy [%x /lib/connector/hoon]~)]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %core *] i.moves)
::
=/ =vase vase.build-result.result.p.card.i.moves
::
=/ files=(set [%x path])
%- sy :~
[%x /lib/old-lib/hoon]
[%x /sur/gh/hoon]
[%x /sur/plan-acct/hoon]
[%x /sur/plan/acct/hoon]
[%x /lib/old/lib/hoon]
[%x /app/gh2/hoon]
[%x /lib/gh/parse/hoon]
[%x /lib/gh-parse/hoon]
[%x /lib/connector/hoon]
==
::
;: weld
(expect-eq !>([~[/gh2] duct.i.moves]))
(compare-vase !>(16) vase.build-result.result.p.card.i.moves)
::
%- expect-eq !>
:_ i.t.moves
^- move:ford-gate
:* duct=~[/gh2] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.9
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.9] files]
==
== ==
::
=^ results6 ford-gate
%- test-ford-take-with-comparator :*
ford-gate
now=~1234.5.9
scry=(scry-with-results-and-failures scry-results)
::
^= take-args
:* wire=/~nul/clay-sub/~nul/home/~1234.5.8 duct=~[/gh3]
^= wrapped-sign ^- (hypo sign:ford-gate) :- *type
[%c %wris [%da ~1234.5.9] (sy [%x /lib/connector/hoon]~)]
==
::
^= comparator
|= moves=(list move:ford-gate)
::
?> =(2 (lent moves))
?> ?=([^ ^ ~] moves)
?> ?=([* %give %made @da %complete %success %core *] i.moves)
::
=/ =vase vase.build-result.result.p.card.i.moves
::
=/ files=(set [%x path])
%- sy :~
[%x /lib/old-lib/hoon]
[%x /sur/gh/hoon]
[%x /sur/plan-acct/hoon]
[%x /sur/plan/acct/hoon]
[%x /lib/old/lib/hoon]
[%x /app/gh3/hoon]
[%x /lib/gh/parse/hoon]
[%x /lib/gh-parse/hoon]
[%x /lib/connector/hoon]
==
::
;: weld
(expect-eq !>([~[/gh3] duct.i.moves]))
(compare-vase !>(15) vase.build-result.result.p.card.i.moves)
::
%- expect-eq !>
:_ i.t.moves
^- move:ford-gate
:* duct=~[/gh3] %pass wire=/~nul/clay-sub/~nul/home/~1234.5.9
%c %warp [~nul ~nul] %home
`[%mult [%da ~1234.5.9] files]
==
== ==
::
=^ results7 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.10
scry=scry-is-forbidden
::
call-args=[duct=~[/gh] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/gh] %pass /~nul/clay-sub/~nul/home/~1234.5.9
%c %warp [~nul ~nul] %home ~
== == ==
::
=^ results8 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.11
scry=scry-is-forbidden
::
call-args=[duct=~[/gh2] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/gh2] %pass /~nul/clay-sub/~nul/home/~1234.5.9
%c %warp [~nul ~nul] %home ~
== == ==
::
=^ results9 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.12
scry=scry-is-forbidden
::
call-args=[duct=~[/gh3] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/gh3] %pass /~nul/clay-sub/~nul/home/~1234.5.9
%c %warp [~nul ~nul] %home ~
== == ==
::
;: weld
results1
results2
results3
results4
results5
results6
results7
results8
results9
(expect-ford-empty ford-gate ~nul)
==
:: tests that we can do the simple adjacent mark case, and that we use grab
:: when both available.
::
++ test-walk-prefer-grab
:- `tank`leaf+"test-walk-prefer-grab"
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
=/ scry-results=(map [term beam] cage)
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/one/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [a=tape b=@ud]
:: convert to
++ grow
|%
++ two [b a "grow"]
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/two/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [a=@ud b=tape c=type]
++ grab
|%
++ one |=([a=tape b=@ud] [b a "grab"])
--
--
'''
::
:: make sure we can deal with random not-hoon files in mar
:- [%cy [[~nul %home %da ~1234.5.6] /js/dummy/mar]]
:- %js
:- hoon-src-type
'''
window.onload = function()
'''
==
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results scry-results)
::
^= call-args
:* duct=~[/walk] type=~ %build ~nul live=%.y
%walk [~nul %home] %one %two
==
::
^= moves
:~ ^- move:ford-gate
:* duct=~[/walk] %give %made ~1234.5.6
%complete %success %walk
[%grab %one %two]~
==
^- move:ford-gate
:* duct=~[/walk] %pass /~nul/clay-sub/~nul/home/~1234.5.6
%c %warp [~nul ~nul] %home ~ %mult [%da ~1234.5.6]
%- sy :~
[%x /mar/two/hoon] [%x /mar/one/hoon]
== == == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/walk] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/walk] %pass /~nul/clay-sub/~nul/home/~1234.5.6
%c %warp [~nul ~nul] %home ~
== == ==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
::
++ test-walk-large-graph
:- `tank`leaf+"test-walk-large-graph"
::
=^ results1 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=(scry-with-results large-mark-graph)
::
^= call-args
:* duct=~[/walk] type=~ %build ~nul live=%.y
%walk [~nul %home] %one %four
==
::
^= moves
:~ ^- move:ford-gate
:* duct=~[/walk] %give %made ~1234.5.6
%complete %success %walk
[[%grab %one %two] [%grab %two %four] ~]
==
^- move:ford-gate
:* duct=~[/walk] %pass /~nul/clay-sub/~nul/home/~1234.5.6
%c %warp [~nul ~nul] %home ~ %mult [%da ~1234.5.6]
%- sy :~
[%x /mar/one/hoon] [%x /mar/two/hoon]
[%x /mar/four/hoon] [%x /mar/five/hoon]
== == == ==
::
=^ results2 ford-gate
%- test-ford-call :*
ford-gate
now=~1234.5.6
scry=scry-is-forbidden
::
call-args=[duct=~[/walk] type=~ %kill ~nul]
::
^= moves
:~ :* duct=~[/walk] %pass /~nul/clay-sub/~nul/home/~1234.5.6
%c %warp [~nul ~nul] %home ~
== == ==
::
;: weld
results1
results2
(expect-ford-empty ford-gate ~nul)
==
:: +test-walk-large-graph, except we're going to shove data through it.
::
++ test-cast-large-graph
:- `tank`leaf+"test-cast-large-graph"
::
=^ results1 ford-gate
%- test-ford-call-with-comparator :*
ford-gate
now=~1234.5.6
scry=(scry-with-results large-mark-graph)
::
^= call-args
:* duct=~[/large] type=~ %build ~nul live=%.n
[%cast [~nul %home] %four [%volt [~nul %home] %one ["one" 1]]]
==
^= comparator
|= moves=(list move:ford-gate)
::
?> =(1 (lent moves))
?> ?=([^ ~] moves)
?> ?=([* %give %made @da %complete %success %cast *] i.moves)
::
=/ result=cage cage.build-result.result.p.card.i.moves
::
%+ weld
%- expect-eq !>
:- %four
p.result
::
%+ weld
%- expect-eq !>
:- ["grab" "one"]
q.q.result
::
%- expect-eq !>
:- &
(~(nest ut p.q.result) | -:!>(*[tape tape]))
==
::
;: weld
results1
(expect-ford-empty ford-gate ~nul)
==
:: |data: shared data between cases
:: +| data
++ large-mark-graph
^- (map [term beam] cage)
::
=/ hoon-src-type=type [%atom %$ ~]
=/ arch-type=type -:!>(*arch)
::
%- my :~
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/one/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [a=tape b=@ud]
:: convert to
++ grow
|%
++ two [b a "grow"]
++ five b
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/two/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [a=@ud b=tape c=tape]
++ grab
|%
++ one |=([a=tape b=@ud] [b a "grab"])
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/three/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [b=tape c=tape]
++ grab
|%
++ one |=([a=tape b=@ud] [a "grab"])
--
++ grow
|%
++ two
[b c]
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/four/mar]]
:- %hoon
:- hoon-src-type
'''
|_ [c=tape b=tape]
++ grab
|%
++ two
|= [a=@ud b=tape c=tape]
[c b]
--
--
'''
::
:- [%cx [[~nul %home %da ~1234.5.6] /hoon/five/mar]]
:- %hoon
:- hoon-src-type
'''
|_ a=@u
++ grab
|%
++ four
:: ignore the value entirely
|= [c=tape b=tape]
5
--
++ grow
|%
++ one
[a "empty" "grow"]
--
--
'''
==
::
:: |utilities: helper arms
::
::+| utilities
++ check-post-made
|= $: move=move:ford-gate
=duct
=type
date=@da
title=@tas
contents=tape
==
^- tang
::
?> ?=([* %give %made @da %complete %success ^ *] move)
=/ result build-result.result.p.card.move
?> ?=([%success %scry %noun type-a=* @tas *] head.result)
?> ?=([%success ^ *] tail.result)
?> ?=([%success %ride type-title-a=* %post-a] head.tail.result)
?> ?=([%success %ride type-title-b=* %post-b] tail.tail.result)
::
;: welp
%- expect-eq !>
[duct duct.move]
::
%- expect-eq !>
[date date.p.card.move]
::
%- expect-eq !>
:_ head.result(p.q.cage *^type)
[%success %scry %noun *^type [title=title contents=contents]]
::
%- expect-eq !>
:- &
(~(nest ut p.q.cage.head.result) | type)
::
%- expect-eq !>
:- [%success %ride *^type 'post-a']
head.tail.result(p.vase *^type)
::
%- expect-eq !>
:- &
(~(nest ut p.vase.head.tail.result) | -:!>(''))
::
%- expect-eq !>
:- [%success %ride *^type 'post-b']
tail.tail.result(p.vase *^type)
::
%- expect-eq !>
:- &
(~(nest ut p.vase.tail.tail.result) | -:!>(''))
==
:: +compare-vase: compares the value of a vase and ensure that the types nest
::
++ compare-vase
|= [expected=vase actual=vase]
^- tang
%+ weld
%- expect-eq !>
:- q.expected
q.actual
::
%- expect-eq !>
:- &
(~(nest ut p.actual) | p.expected)
::
:: +scry-with-results
++ scry-with-results
|= results=(map [=term =beam] cage)
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-with-results+[term=term beam=beam]
::
[~ ~ (~(got by results) [term beam])]
:: +scry-with-results-and-failures
::
++ scry-with-results-and-failures
|= results=(map [=term =beam] (unit cage))
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-with-results+[term=term beam=beam]
::
[~ (~(got by results) [term beam])]
:: +scry-succeed: produces a scry function with a known request and answer
::
++ scry-succeed
|= [date=@da result=cage] ^- sley
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-succeed+[beam+beam term+term]
?> =(term %cx)
?> =(beam [[~nul %desk %da date] /bar/foo])
::
[~ ~ result]
:: +scry-fail: produces a scry function with a known request and failed answer
::
++ scry-fail
|= date=@da ^- sley
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-fail+[beam+beam term+term]
?> =(term %cx)
?> =(beam [[~nul %desk %da date] /bar/foo])
::
[~ ~]
:: +scry-block: produces a scry function with known request and blocked answer
::
++ scry-block
|= date=@da ^- sley
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-block+[beam+beam term+term]
?> =(term %cx)
?> =(beam [[~nul %desk %da date] /bar/foo])
::
~
::
++ scry-blocks
|= dates=(set @da) ^- sley
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-block+[beam+beam term+term]
?> =(term %cx)
?> ?=([%da @da] r.beam)
?> (~(has in dates) p.r.beam)
::
~
:: +scry-is-forbidden: makes sure ford does not attempt to scry
::
++ scry-is-forbidden ^- sley
|= [* (unit (set monk)) =term =beam]
^- (unit (unit cage))
::
~| scry-is-forbidden+[beam+beam term+term]
!!
::
++ test-ford-call
|= $: ford-gate=_ford-gate
now=@da
scry=sley
call-args=[=duct type=* wrapped-task=(hobo task:able:ford-gate)]
expected-moves=(list move:ford-gate)
==
^- [tang _ford-gate]
::
=/ ford (ford-gate now=now eny=0xdead.beef scry=scry)
::
=^ moves ford-gate
%- call:ford call-args
::
=/ output=tang
%- expect-eq !>
:- expected-moves
moves
::
[output ford-gate]
::
++ test-ford-take
|= $: ford-gate=_ford-gate
now=@da
scry=sley
take-args=[=wire =duct wrapped-sign=(hypo sign:ford-gate)]
expected-moves=(list move:ford-gate)
==
^- [tang _ford-gate]
::
=/ ford (ford-gate now=now eny=0xdead.beef scry=scry)
::
=^ moves ford-gate
%- take:ford take-args
::
=/ output=tang
%- expect-eq !>
:- expected-moves
moves
::
[output ford-gate]
:: +test-ford-call-with-comparator
::
:: Sometimes we can't just do simple comparisons between the moves statements and
:: must instead specify a gate that performs the comparisons.
::
++ test-ford-call-with-comparator
|= $: ford-gate=_ford-gate
now=@da
scry=sley
call-args=[=duct type=* wrapped-task=(hobo task:able:ford-gate)]
move-comparator=$-((list move:ford-gate) tang)
==
^- [tang _ford-gate]
::
=/ ford (ford-gate now=now eny=0xdead.beef scry=scry)
::
=^ moves ford-gate
%- call:ford call-args
::
=/ output=tang (move-comparator moves)
::
[output ford-gate]
:: +test-ford-take-with-comparator
::
++ test-ford-take-with-comparator
|= $: ford-gate=_ford-gate
now=@da
scry=sley
take-args=[=wire =duct wrapped-sign=(hypo sign:ford-gate)]
move-comparator=$-((list move:ford-gate) tang)
==
^- [tang _ford-gate]
::
=/ ford (ford-gate now=now eny=0xdead.beef scry=scry)
::
=^ moves ford-gate
%- take:ford take-args
::
=/ output=tang (move-comparator moves)
::
[output ford-gate]
:: +expect-ford-empty: assert that ford's state is one empty ship
::
:: At the end of every test, we want to assert that we have cleaned up all
:: state.
::
++ expect-ford-empty
|= [ford-gate=_ford-gate ship=@p]
^- tang
=/ ford *ford-gate
%- expect-eq !>
:- (my [ship *ford-state:ford]~)
state-by-ship.ax.+>+<.ford
--