diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-01-29 14:23:09 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-01-29 14:23:09 +0000 |
commit | 7349bd0176b8a8ced3a017bb5d0e9ebb30570722 (patch) | |
tree | 0c550418b620ecd81d386089b59e8d0272c0c565 /tests/lang | |
parent | 7dedbd896ade732ab2fe88a5fe88e069cb329fa5 (diff) |
New primitives:
* `sub' to subtract two numbers.
* `stringLength' to get the length of a string.
* `substring' to get a substring of a string. These should be enough
to allow most string operations to be expressed.
Diffstat (limited to 'tests/lang')
-rw-r--r-- | tests/lang/eval-fail-substring.nix | 1 | ||||
-rw-r--r-- | tests/lang/eval-okay-substring.exp | 1 | ||||
-rw-r--r-- | tests/lang/eval-okay-substring.nix | 19 | ||||
-rw-r--r-- | tests/lang/lib.nix | 14 |
4 files changed, 32 insertions, 3 deletions
diff --git a/tests/lang/eval-fail-substring.nix b/tests/lang/eval-fail-substring.nix new file mode 100644 index 000000000..f37c2bc0a --- /dev/null +++ b/tests/lang/eval-fail-substring.nix @@ -0,0 +1 @@ +builtins.substring (builtins.sub 0 1) 1 "x" diff --git a/tests/lang/eval-okay-substring.exp b/tests/lang/eval-okay-substring.exp new file mode 100644 index 000000000..d6098476b --- /dev/null +++ b/tests/lang/eval-okay-substring.exp @@ -0,0 +1 @@ +Str("ooxfoobarybarzobaabb",[]) diff --git a/tests/lang/eval-okay-substring.nix b/tests/lang/eval-okay-substring.nix new file mode 100644 index 000000000..184d72580 --- /dev/null +++ b/tests/lang/eval-okay-substring.nix @@ -0,0 +1,19 @@ +with builtins; + +let + + s = "foobar"; + +in + +substring 1 2 s ++ "x" ++ substring 0 (stringLength s) s ++ "y" ++ substring 3 100 s ++ "z" ++ substring 2 (sub (stringLength s) 3) s ++ "a" ++ substring 3 0 s ++ "b" ++ substring 3 1 s diff --git a/tests/lang/lib.nix b/tests/lang/lib.nix index f888453ff..ec705299a 100644 --- a/tests/lang/lib.nix +++ b/tests/lang/lib.nix @@ -1,18 +1,26 @@ +with builtins; + rec { fold = op: nul: list: if list == [] then nul - else op (builtins.head list) (fold op nul (builtins.tail list)); + else op (head list) (fold op nul (tail list)); concat = fold (x: y: x + y) ""; flatten = x: - if builtins.isList x + if isList x then fold (x: y: (flatten x) ++ y) [] x else [x]; - sum = fold (x: y: builtins.add x y) 0; + sum = fold (x: y: add x y) 0; + + hasSuffix = ext: fileName: + let lenFileName = stringLength fileName; + lenExt = stringLength ext; + in !(lessThan lenFileName lenExt) && + substring (sub lenFileName lenExt) lenFileName fileName == ext; } |