diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-08-29 19:38:14 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-08-29 19:39:15 -0700 |
| commit | 4f30e02acb666c52e0254eb9a3bf89a9cabb5e6d (patch) | |
| tree | bacc6a2baf70c18d3d44db06dc2235ec42edd49f /core/collections.nom | |
| parent | aae5ce31feb482a86d8ef96fb1f104194f26828c (diff) | |
Handling more compatibility stuff, including Lua 5.4, and a backup for
if openssl module is not found, and moving containers (List/Dict) into
their own file, as well as bit operators (and support for __bxor, etc.
metamethods in Lua 5.2/LuaJIT)
Diffstat (limited to 'core/collections.nom')
| -rw-r--r-- | core/collections.nom | 78 |
1 files changed, 26 insertions, 52 deletions
diff --git a/core/collections.nom b/core/collections.nom index 00bb5d8..938466d 100644 --- a/core/collections.nom +++ b/core/collections.nom @@ -7,63 +7,37 @@ use "core/metaprogramming.nom" use "core/control_flow.nom" use "core/operators.nom" -# List/dict functions: -# Indexing -test: - assume ((2 nd to last in [1, 2, 3, 4, 5]) is 4) -compile [..] - %index st to last in %list, %index nd to last in %list - %index rd to last in %list, %index th to last in %list -..to (Lua value "utils.nth_to_last(\(%list as lua expr), \(%index as lua expr))") - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -parse [last in %list] as (1 st to last in %list) -parse [first in %list] as %list.1 - -# Membership testing -test: - assume (3 is in [1, 2, 3, 4, 5]) -action [%item is in %list, %list contains %item, %list has %item]: - for %key = %value in %list: - if (%key is %item): return (yes) - return (no) - -test: - assume (99 isn't in [1, 2, 3]) -action [..] - %item isn't in %list, %item is not in %list, %list doesn't contain %item - %list does not contain %item, %list doesn't have %item, %list does not have %item -..: - for %key = %value in %list: - if (%key is %item): return (no) - return (yes) - -test: - assume ({x:no} has key "x") -parse [%list has key %index, %list has index %index] as (%list.%index != (nil)) - -test: - assume ({x:no} doesn't have key "y") - assume (not ({x:no} doesn't have key "x")) -parse [..] - %list doesn't have key %index, %list does not have key %index - %list doesn't have index %index, %list does not have index %index -..as (%list.%index == (nil)) - -compile [number of keys in %list] to (..) - Lua value "utils.size(\(%list as lua expr))" - +# List functionality: test: %list = [1, 2, 3, 4, 5] + %visited = {} + for %i = %x in %list: %visited.%i = (yes) + assume (%visited == {1:yes, 2:yes, 3:yes, 4:yes, 5:yes}) + %visited = {} + for %x in %list: %visited.%x = (yes) + assume (%visited == {1:yes, 2:yes, 3:yes, 4:yes, 5:yes}) + assume ((%list::2 nd to last) == 4) + assume ((%list::first) == 1) + assume (%list::has 3) + assume ((%list::index of 3) == 3) + assume ((size of %list) == 5) %list::add 6 - assume ((last in %list) is 6) + assume ((%list::last) == 6) %list::pop - assume ((last in %list) is 5) + assume ((%list::last) == 5) %list::remove index 1 - assume ((first in %list) is 2) - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + assume ((%list::first) == 2) + +# Dict functionality +test: + %dict = {x:1, y:2, z:3} + assume ((size of %dict) == 3) + assume ((% for % in {x:1}) == [{key:"x", value:1}]) + assume (({key:%k, value:%v} for %k = %v in {x:1}) == [{key:"x", value:1}]) + assume (({x:1, y:1} + {y:10, z:10}) == {x:1, y:11, z:10}) + assume (({x:1, y:1} | {y:10, z:10}) == {x:1, y:1, z:10}) + assume (({x:1, y:1} & {y:10, z:10}) == {y:1}) + assume (({x:1, y:1} ~ {y:10, z:10}) == {x:1, z:10}) # List Comprehension test: |
