diff options
| author | Brian Campbell | 2018-01-15 14:57:52 +0000 |
|---|---|---|
| committer | Brian Campbell | 2018-01-15 14:57:52 +0000 |
| commit | fb8e8ce65d5ea13b92ec731820ed6c7a9a89f6a0 (patch) | |
| tree | a7f9f9454a24204ab2b2bf59253e47931463c994 /test | |
| parent | 83538020553691efe472984ee16ebd04eb252f82 (diff) | |
Support non-trivial literal patterns
Previously we only did top-level literal pattern to guard conversion, this
does it throughout any pattern
Diffstat (limited to 'test')
| -rw-r--r-- | test/mono/set2.sail | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/mono/set2.sail b/test/mono/set2.sail new file mode 100644 index 00000000..3bb76870 --- /dev/null +++ b/test/mono/set2.sail @@ -0,0 +1,29 @@ +default Order dec + +(* A function which is merely parametrised by a size does not need to be + monomorphised *) + +val forall 'n, 'n in {32,64}. ([:'n:], bit[32]) -> bit[64] effect pure parametric + +function parametric(n,v) = { + let (bit['n]) x = exts(v) in + extz(x) +} + +(* But if we do a calculation on the size then we'll need to case split *) + +val forall 'n, 'n in {16,32}. ([:'n:], bit[32]) -> bit[64] effect pure depends + +function depends(n,v) = { + let 'm = 2 * n in + let (bit['m]) x = exts(v) in + extz(x) +} + +val unit -> bool effect pure run + +function run () = + parametric(32,0x80000000) == 0x0000000080000000 & + parametric(64,0x80000000) == 0xffffffff80000000 & + depends(16,0x80000000) == 0x0000000080000000 & + depends(32,0x80000000) == 0xffffffff80000000 |
