src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/builtin_fn_container_test.elvts (about)

     1  //////
     2  # ns #
     3  //////
     4  
     5  // Accessing like a map
     6  ~> put (ns [&name=value])[name]
     7  ▶ value
     8  // Accessing using :
     9  ~> var n: = (ns [&name=value])
    10     put $n:name
    11  ▶ value
    12  
    13  ## bad key in argument ##
    14  ~> ns [&[]=[]]
    15  Exception: bad value: key of argument of "ns" must be string, but is list
    16    [tty]:1:1-11: ns [&[]=[]]
    17  
    18  ////////////
    19  # make-map #
    20  ////////////
    21  
    22  ~> make-map []
    23  ▶ [&]
    24  ~> make-map [[k v]]
    25  ▶ [&k=v]
    26  ~> make-map [[k1 v1] [k2 v2]]
    27  ▶ [&k1=v1 &k2=v2]
    28  // Later key override previous one
    29  ~> make-map [[k v] [k v2]]
    30  ▶ [&k=v2]
    31  // String of length 2 also works
    32  ~> make-map [kv]
    33  ▶ [&k=v]
    34  
    35  ## bad argument ##
    36  ~> make-map [{ } [k v]]
    37  Exception: bad value: input to make-map must be iterable, but is fn
    38    [tty]:1:1-20: make-map [{ } [k v]]
    39  ~> make-map [[k v] [k]]
    40  Exception: bad value: input to make-map must be iterable with 2 elements, but is list with 1 elements
    41    [tty]:1:1-20: make-map [[k v] [k]]
    42  
    43  ////////
    44  # conj #
    45  ////////
    46  ~> conj [] a
    47  ▶ [a]
    48  ~> conj [a b]
    49  ▶ [a b]
    50  ~> conj [a b] c
    51  ▶ [a b c]
    52  ~> conj [a b] c d
    53  ▶ [a b c d]
    54  
    55  /////////
    56  # assoc #
    57  /////////
    58  
    59  ~> assoc [old] 0 new
    60  ▶ [new]
    61  ~> assoc [&] k v
    62  ▶ [&k=v]
    63  ~> assoc [&k=old] k new
    64  ▶ [&k=new]
    65  
    66  //////////
    67  # dissoc #
    68  //////////
    69  
    70  ~> dissoc [&k=v] k
    71  ▶ [&]
    72  
    73  ## bad argument ##
    74  ~> dissoc foo 0
    75  Exception: cannot dissoc
    76    [tty]:1:1-12: dissoc foo 0
    77  
    78  ///////////
    79  # has-key #
    80  ///////////
    81  
    82  ~> has-key [&k=v] k
    83  ▶ $true
    84  ~> has-key [&k=v] bad
    85  ▶ $false
    86  ~> has-key [lorem ipsum] 0
    87  ▶ $true
    88  ~> has-key [lorem ipsum] 2
    89  ▶ $false
    90  
    91  ## list slices ##
    92  ~> has-key [lorem ipsum] 0..
    93  ▶ $true
    94  ~> has-key [lorem ipsum] 0..=
    95  ▶ $true
    96  ~> has-key [lorem ipsum] ..2
    97  ▶ $true
    98  ~> has-key [lorem ipsum] ..=2
    99  ▶ $false
   100  ~> has-key [lorem ipsum dolor sit] 0..4
   101  ▶ $true
   102  ~> has-key [lorem ipsum dolor sit] 0..=4
   103  ▶ $false
   104  ~> has-key [lorem ipsum dolor sit] 1..3
   105  ▶ $true
   106  ~> has-key [lorem ipsum dolor sit] 1..5
   107  ▶ $false
   108  ~> has-key [lorem ipsum dolor sit] -2..=-1
   109  ▶ $true
   110  
   111  /////////////
   112  # has-value #
   113  /////////////
   114  ~> has-value [&lorem=ipsum &foo=bar] lorem
   115  ▶ $false
   116  ~> has-value [&lorem=ipsum &foo=bar] bar
   117  ▶ $true
   118  ~> has-value [foo bar] bar
   119  ▶ $true
   120  ~> has-value [foo bar] badehose
   121  ▶ $false
   122  ~> has-value [[foo] [bar]] [foo]
   123  ▶ $true
   124  ~> has-value "foo" o
   125  ▶ $true
   126  ~> has-value "foo" d
   127  ▶ $false
   128  
   129  ////////
   130  # keys #
   131  ////////
   132  
   133  ~> keys [&]
   134  ~> keys [&a=foo]
   135  ▶ a
   136  ~> keys [&a=foo &b=bar] | order
   137  ▶ a
   138  ▶ b
   139  
   140  ## bad argument ##
   141  ~> keys (num 1)
   142  Exception: cannot iterate keys of number
   143    [tty]:1:1-12: keys (num 1)
   144  
   145  ## propagates output error ##
   146  ~> keys [&a=foo] >&-
   147  Exception: port does not support value output
   148    [tty]:1:1-17: keys [&a=foo] >&-