Add a new serialized test case

Contains a serialized, mutually recursive function that won't be
recognized as unsafe unless the sandboxing information is expanded
correctly.
This commit is contained in:
Dan Doel 2023-10-25 11:19:10 -04:00
parent a3b3ece726
commit 3d5e688466
9 changed files with 97 additions and 4 deletions

View File

@ -20,6 +20,24 @@ sandbox.checkAllowed name ok a =
true -> Tests.pass (name ++ " allowed")
false -> Tests.fail name " unexpected disallowed"
sandbox.directory =
"unison-src/transcripts-using-base/serialized-cases/"
sandbox.file = FilePath (directory ++ "case-04.v4.ser")
serial.checkLoaded : '{IO, Tests, Exception} ()
serial.checkLoaded = do
input = FilePath.readFile sandbox.file
match fromBase32 input with
Left msg -> raiseFailure msg input
Right bs ->
(deps, v) = loadValueBytes bs
_ = cache_ deps
match Value.load v with
Left l -> raiseFailure "value missing deps" l
Right (f, _) -> checkUnsafe "loaded" (Value.value f)
sandbox.tests = do
checkSafe "5" 5
checkSafe "5.0" 5.0
@ -30,3 +48,4 @@ sandbox.tests = do
checkUnsafe "Code.cache_" Code.cache_
checkAllowed "FilePath.open" [termLink FilePath.open.impl] FilePath.open
checkAllowed "Code.cache_" [termLink Code.cache_] Code.cache_
!checkLoaded

View File

@ -11,7 +11,7 @@ serial.availableCases _ =
slice = cases (FilePath nm) ->
Text.take (Text.size nm - 7) nm
-- caseNums = ["00", "01", "02", "03"]
caseNums = ["00", "02"]
caseNums = ["00", "02", "04"]
files = map (n -> FilePath ("case-" ++ n ++ ".v4.ser")) caseNums
map slice (filter p files)

View File

@ -35,7 +35,10 @@ runTestCase name =
hfile = directory ++ name ++ ".v4.hash"
p@(f, i) = loadSelfContained sfile
pl@(fl, il) = loadSelfContained lsfile
pl@(fl, il) =
if fileExists lsfile
then loadSelfContained lsfile
else p
o = fromUtf8 (readFile ofile)
h = readFile hfile

View File

@ -31,7 +31,10 @@ runTestCase name =
hfile = directory ++ name ++ ".v4.hash"
p@(f, i) = loadSelfContained sfile
pl@(fl, il) = loadSelfContained lsfile
pl@(fl, il) =
if fileExists lsfile
then loadSelfContained lsfile
else p
o = fromUtf8 (readFile ofile)
h = readFile hfile
@ -88,8 +91,9 @@ serialTests = do
◉ serialTests case-01
◉ serialTests case-02
◉ serialTests case-03
◉ serialTests case-04
4 test(s) passing
5 test(s) passing
Tip: Use view serialTests to view the source of a test.

View File

@ -0,0 +1,23 @@
```ucm:hide
.> builtins.mergeio
```
```unison
mutual0 = cases
0 -> "okay"
n ->
_ = openFile
mutual1 (drop n 1)
mutual1 n =
mutual0 n
mkTestCase = do
saveTestCase "case-04" "v4" mutual1 5
```
```ucm
.> add
.> run mkTestCase
```

View File

@ -0,0 +1,41 @@
```unison
mutual0 = cases
0 -> "okay"
n ->
_ = openFile
mutual1 (drop n 1)
mutual1 n =
mutual0 n
mkTestCase = do
saveTestCase "case-04" "v4" mutual1 5
```
```ucm
I found and typechecked these definitions in scratch.u. If you
do an `add` or `update`, here's how your codebase would
change:
⍟ These new definitions are ok to `add`:
mkTestCase : '{IO, Exception} ()
mutual0 : Nat -> Text
mutual1 : Nat -> Text
```
```ucm
.> add
⍟ I've added these definitions:
mkTestCase : '{IO, Exception} ()
mutual0 : Nat -> Text
mutual1 : Nat -> Text
.> run mkTestCase
()
```

View File

@ -0,0 +1 @@
okay

View File

@ -0,0 +1 @@
EXAQLMU6IKGAY7DNOHND5VUQQAQPIJN3IVCF5DISOOEVLRQZ3Q2CZOYEVDMY7MYQX2CG6CJFH2HQD6XOMKHQNK5JUZB3G7RZQNREQRQ=

View File

@ -0,0 +1 @@
AAAAABABAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQCBIBAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQEAABEEADVNOCW62AVOZXJ6CMCXMWMTBLF4FFUTLGYPNRXF3BZCNXIDIOZNIAAEAUAFLAIVCNFWN2CETMGG2PBZZPFAUZWVKGTU2VNQEBNONWF647LF4XS5VPHC5GVES5JGZJ6BVP4TNL4HITOXS7DKFYZC4YI3RDOPXHDH2QAAAAAAAAAAAAAABAGBQAAEAQMAAGAABU4YLUAEAAAAAAAAAAAAAHAMCG623BPEAQWAACAEAQGAIBEEAG57PICSIFU224UOLFTG2BAWCL4E7NVW2SJJUAWDIJO7R3YJCNHYQAAAFACAIMAEAAAAAAAAAAAAILAAAQCAIDAEAAQTTBOQXGI4TPOABAEAADAEASCAB2WXBLPNAKXM3U7BGBLWLGJQVS6CS2JVTMHWY3S5Q4RG3UBUHMWUAQCAABAFAAAL7RKMFUH4QQ5G2NTSQN244XUAWGVES3B5ALZMIZQ472Z3Z2SNRY5NY74Q7LRMSAM6YKIY6LXDY4GMGUQNR5G27OEYPJPYTZR5GNAIAAAAAAAAAAAAAAAAAQCQAVMBCUJUWZXIISNQY3J4HHF4UCTG2VI2OTKVWAQFVZWYX3T5MXS6LWV44LU2USLVE3FHYGV7SNVPQ5CN26L4NIXDELTBDOENZ644M7KAAAAAAAAAAAAAAAEAYCAAASCAB2WXBLPNAKXM3U7BGBLWLGJQVS6CS2JVTMHWY3S5Q4RG3UBUHMWUAQCAKACVQEKRGS3G5BCJWDDNHQ44XSQKM3KVDJ2NKWYCAWXG3C7OPVS6LZO2XTROTKSJOUTMU7A2X6JWV6DUJXLZPRVC4MROMENYRXH3TRT5IAAAAAAAAAAAAAAAQDAYAACAIDAEASCAB2WXBLPNAKXM3U7BGBLWLGJQVS6CS2JVTMHWY3S5Q4RG3UBUHMWUAACAABAFAAAL7RKMFUH4QQ5G2NTSQN244XUAWGVES3B5ALZMIZQ472Z3Z2SNRY5NY74Q7LRMSAM6YKIY6LXDY4GMGUQNR5G27OEYPJPYTZR5GNAIAAAAAAAAAAAAAAAAAQCQAVMBCUJUWZXIISNQY3J4HHF4UCTG2VI2OTKVWAQFVZWYX3T5MXS6LWV44LU2USLVE3FHYGV7SNVPQ5CN26L4NIXDELTBDOENZ644M7KAAAAAAAAAAAAAAAEAYCAAASCADO7XUBJEC2NNOKHFSZTNAQLBF6CPW23NJEU2ALBUEXPY54ERGT4IAACAKACVQEKRGS3G5BCJWDDNHQ44XSQKM3KVDJ2NKWYCAWXG3C7OPVS6LZO2XTROTKSJOUTMU7A2X6JWV6DUJXLZPRVC4MROMENYRXH3TRT5IAAAAAAAAAAAAAAAQDAYAAACYAAEAQCAYBAEQQB7ZTWJ7HTBQHKHV76VRKV22ASGMLEU2GTPHIUF5WVZ3MTEG7GMVZAAAAWAACAEAQGAIACNEU6LTPOBSW4RTJNRSS42LNOBWC45RTAABQCAJBADXQNAUFQOHXJTPKPSMQ3IJJCGO7SAOAWDHVWQXMIWYAY7DBUH626AACAEAACAKAAAX7CUYLIPZBB2NU3HFA3VZZPIBMNKJFWD2AXSYRTBZ7VTXTVE3DR23R7ZB6XCZEAZ5QURR4XOHRYMYNJA3D2NV64JQ6S7RHTD2M2AQAAAAAAAAAAAAAAAABAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQEAABEEAO6BUCQWBY65GN5J6JSDNBFEIZ36IBYCYM6W2C5RC3ADD4MGQ73LYAAEAUAFLAIVCNFWN2CETMGG2PBZZPFAUZWVKGTU2VNQEBNONWF647LF4XS5VPHC5GVES5JGZJ6BVP4TNL4HITOXS7DKFYZC4YI3RDOPXHDH2QAAAAAAAAAAAAAABAGBQAAQAQCAIBBMAACAIBAMAAEAQBAABQABABAAAQCQAAF7YVGC2D6IIOTNGZZIG5OOL2ALDKSJNQ6QF4WEMYOP5M545JGY4OW4P6IPVYWJAGPMFEMPF3R4ODGDKIGY6TNPXCMHUX4J4Y6TGQEAAAAAAAAAAAAAAAAAIBIAKWARKE2LM3UEJGYMNU6DTS6KBJTNKUNHJVK3AIC243ML5Z6WLZPF3K6OF2NKJF2SNST4DK7ZG2XYORG5PF6GULRSFZQRXCG47OOGPVAAAAAAAAAAAAAAACAMBAAAJBAD7THMT6PGDAOUPL75LCVLVUBEMYWJJUNG6ORIL3NLTWZGIN6MZLSAABAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQMAABAEDAABABIADA6Z4AIF7CZJFJTJVKJO2WEGOJWWKPIBDZ454XRZHXTTXXLQUQ3F726PGQ3QMG3LDJDQLAG5LVZVZCGSQ2FYQWVEV6JOCWJWKTUQT5AABAAAIBAEAACAIBAMCACQBFYD4HAAEOPEY6KWV5SK35RF27KLC64VY4NKCESKIVSPM4WQMVB3WRYSXHRELECCBPXMQZXK54ZO7TPJJTSUMN7XIN6C6D4CBWNAK54AAAAEAAAAIBIAAC74KTBNB7EEHJWTM4UDOXHF5AFRVJEWYPIC6LCGMHH6WO6OUTMOHLOH7EH24LEQDHWCSGHS5Y6HBTBVEDMPJWX3RGD2L6E6MPJTICAAAAAAAAAAAAAAAAAEAUAFLAIVCNFWN2CETMGG2PBZZPFAUZWVKGTU2VNQEBNONWF647LF4XS5VPHC5GVES5JGZJ6BVP4TNL4HITOXS7DKFYZC4YI3RDOPXHDH2QAAAAAAAAAAAAAABAGBIBAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIAACIIAHK24FN5UBK5TOT4EYFOZMZGCWLYKLJGWNQ63DOLWDSE3OQGQ5S2QCAAAAAAAAAAAAAAACAKACVQEKRGS3G5BCJWDDNHQ44XSQKM3KVDJ2NKWYCAWXG3C7OPVS6LZO2XTROTKSJOUTMU7A2X6JWV6DUJXLZPRVC4MROMENYRXH3TRT5IAAAAAAAAAAAAAAAQDBACQCAKAAAX7CUYLIPZBB2NU3HFA3VZZPIBMNKJFWD2AXSYRTBZ7VTXTVE3DR23R7ZB6XCZEAZ5QURR4XOHRYMYNJA3D2NV64JQ6S7RHTD2M2AQAAAAAAAAAAAAAAAABAFAAAL7RKMFUH4QQ5G2NTSQN244XUAWGVES3B5ALZMIZQ472Z3Z2SNRY5NY74Q7LRMSAM6YKIY6LXDY4GMGUQNR5G27OEYPJPYTZR5GNAIAAAAAAAAAAAAAAAA======