mirror of
https://github.com/sagiegurari/duckscript
synced 2024-10-14 11:53:05 +00:00
New array_concat command
This commit is contained in:
parent
a500700a47
commit
74bd5eeade
|
@ -2,6 +2,7 @@
|
|||
|
||||
### v0.1.9
|
||||
|
||||
* New array_concat command.
|
||||
* New trigger_error command.
|
||||
* New array_push command.
|
||||
* New concat command.
|
||||
|
|
54
docs/sdk.md
54
docs/sdk.md
|
@ -15,6 +15,7 @@
|
|||
* [std::ShowCommandDocumentation (man)](#std__ShowCommandDocumentation)
|
||||
* [std::Unalias (unalias)](#std__Unalias)
|
||||
* [std::collections::Array (array)](#std__collections__Array)
|
||||
* [std::collections::ArrayConcat (array_concat)](#std__collections__ArrayConcat)
|
||||
* [std::collections::ArrayIsEmpty (array_is_empty)](#std__collections__ArrayIsEmpty)
|
||||
* [std::collections::ArrayLength (array_length, arrlen)](#std__collections__ArrayLength)
|
||||
* [std::collections::ArrayPop (array_pop)](#std__collections__ArrayPop)
|
||||
|
@ -738,6 +739,59 @@ release ${handle}
|
|||
#### Aliases:
|
||||
array
|
||||
|
||||
<a name="std__collections__ArrayConcat"></a>
|
||||
## std::collections::ArrayConcat
|
||||
|
||||
```sh
|
||||
handle = array_concat [handle]*
|
||||
```
|
||||
|
||||
Concats all provided arrays and returns a handle to a new array with all items.
|
||||
|
||||
#### Parameters
|
||||
|
||||
Any number of array handles.
|
||||
|
||||
#### Return Value
|
||||
|
||||
A handle to the new array.
|
||||
|
||||
#### Examples
|
||||
|
||||
```sh
|
||||
input1 = range 1 4
|
||||
input2 = range 4 6
|
||||
input3 = range 6 8
|
||||
|
||||
# new array will contain values from 1-7
|
||||
arr = array_concat ${input1} ${input2} ${input3}
|
||||
```
|
||||
|
||||
|
||||
#### Source:
|
||||
|
||||
```sh
|
||||
for scope::array_concat::arg in ${scope::array_concat::arguments}
|
||||
if not is_array ${scope::array_concat::arg}
|
||||
trigger_error "Invalid input, non array handle or array not found."
|
||||
end
|
||||
end
|
||||
|
||||
scope::array_concat::array = array
|
||||
|
||||
for scope::array_concat::arg in ${scope::array_concat::arguments}
|
||||
for scope::array_concat::item in ${scope::array_concat::arg}
|
||||
array_push ${scope::array_concat::array} ${scope::array_concat::item}
|
||||
end
|
||||
end
|
||||
|
||||
set ${scope::array_concat::array}
|
||||
```
|
||||
|
||||
|
||||
#### Aliases:
|
||||
array_concat
|
||||
|
||||
<a name="std__collections__ArrayIsEmpty"></a>
|
||||
## std::collections::ArrayIsEmpty
|
||||
|
||||
|
|
24
duckscript_sdk/src/sdk/std/collections/array_concat/help.md
Normal file
24
duckscript_sdk/src/sdk/std/collections/array_concat/help.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
```sh
|
||||
handle = array_concat [handle]*
|
||||
```
|
||||
|
||||
Concats all provided arrays and returns a handle to a new array with all items.
|
||||
|
||||
#### Parameters
|
||||
|
||||
Any number of array handles.
|
||||
|
||||
#### Return Value
|
||||
|
||||
A handle to the new array.
|
||||
|
||||
#### Examples
|
||||
|
||||
```sh
|
||||
input1 = range 1 4
|
||||
input2 = range 4 6
|
||||
input3 = range 6 8
|
||||
|
||||
# new array will contain values from 1-7
|
||||
arr = array_concat ${input1} ${input2} ${input3}
|
||||
```
|
22
duckscript_sdk/src/sdk/std/collections/array_concat/mod.rs
Executable file
22
duckscript_sdk/src/sdk/std/collections/array_concat/mod.rs
Executable file
|
@ -0,0 +1,22 @@
|
|||
use crate::types::command::create_alias_command;
|
||||
use crate::utils::pckg;
|
||||
use duckscript::types::command::Command;
|
||||
use duckscript::types::error::ScriptError;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "./mod_test.rs"]
|
||||
mod mod_test;
|
||||
|
||||
pub(crate) fn create(package: &str) -> Result<Box<dyn Command>, ScriptError> {
|
||||
let name = pckg::concat(package, "ArrayConcat");
|
||||
let command = create_alias_command(
|
||||
name,
|
||||
vec!["array_concat".to_string()],
|
||||
include_str!("help.md").to_string(),
|
||||
"array_concat".to_string(),
|
||||
include_str!("script.ds").to_string(),
|
||||
0,
|
||||
)?;
|
||||
|
||||
Ok(Box::new(command))
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
use super::*;
|
||||
use crate::test;
|
||||
|
||||
#[test]
|
||||
fn common_functions() {
|
||||
test::test_common_command_functions(create("").unwrap());
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
|
||||
for scope::array_concat::arg in ${scope::array_concat::arguments}
|
||||
if not is_array ${scope::array_concat::arg}
|
||||
trigger_error "Invalid input, non array handle or array not found."
|
||||
end
|
||||
end
|
||||
|
||||
scope::array_concat::array = array
|
||||
|
||||
for scope::array_concat::arg in ${scope::array_concat::arguments}
|
||||
for scope::array_concat::item in ${scope::array_concat::arg}
|
||||
array_push ${scope::array_concat::array} ${scope::array_concat::item}
|
||||
end
|
||||
end
|
||||
|
||||
set ${scope::array_concat::array}
|
|
@ -1,2 +1,3 @@
|
|||
|
||||
scope::array_is_empty::length = array_length ${scope::array_is_empty::argument::1}
|
||||
equals 0 ${scope::array_is_empty::length}
|
|
@ -1,4 +1,5 @@
|
|||
pub(crate) mod array;
|
||||
mod array_concat;
|
||||
mod array_is_empty;
|
||||
pub(crate) mod array_length;
|
||||
pub(crate) mod array_pop;
|
||||
|
@ -18,6 +19,7 @@ pub(crate) fn load(commands: &mut Commands, parent: &str) -> Result<(), ScriptEr
|
|||
let package = pckg::concat(parent, PACKAGE);
|
||||
|
||||
commands.set(array::create(&package))?;
|
||||
commands.set(array_concat::create(&package)?)?;
|
||||
commands.set(array_push::create(&package))?;
|
||||
commands.set(array_is_empty::create(&package)?)?;
|
||||
commands.set(array_length::create(&package))?;
|
||||
|
|
93
test/std/collections/array_concat_test.ds
Normal file
93
test/std/collections/array_concat_test.ds
Normal file
|
@ -0,0 +1,93 @@
|
|||
|
||||
function test_concat_no_input
|
||||
arr = array_concat
|
||||
|
||||
is_arr = is_array ${arr}
|
||||
|
||||
released = release ${arr}
|
||||
assert ${is_arr}
|
||||
end
|
||||
|
||||
function test_concat_single_array
|
||||
input1 = range 1 4
|
||||
|
||||
arr = array_concat ${input1}
|
||||
|
||||
released = release ${input1}
|
||||
|
||||
is_arr = is_array ${arr}
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 3
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 2
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 1
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
defined = is_defined last_element
|
||||
assert_false ${defined}
|
||||
|
||||
released = release ${arr}
|
||||
assert ${is_arr}
|
||||
end
|
||||
|
||||
function test_concat_multiple_arrays
|
||||
input1 = range 1 4
|
||||
input2 = range 4 6
|
||||
input3 = range 6 8
|
||||
|
||||
arr = array_concat ${input1} ${input2} ${input3}
|
||||
|
||||
released = release ${input1}
|
||||
released = release ${input2}
|
||||
released = release ${input3}
|
||||
|
||||
is_arr = is_array ${arr}
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 7
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 6
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 5
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 4
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 3
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 2
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
assert_eq ${last_element} 1
|
||||
|
||||
last_element = array_pop ${arr}
|
||||
defined = is_defined last_element
|
||||
assert_false ${defined}
|
||||
|
||||
released = release ${arr}
|
||||
assert ${is_arr}
|
||||
end
|
||||
|
||||
function test_concat_not_an_array
|
||||
error = get_last_error
|
||||
empty = is_empty ${error}
|
||||
assert ${empty}
|
||||
|
||||
arr = array_concat test
|
||||
|
||||
error = get_last_error
|
||||
empty = is_empty ${error}
|
||||
assert_false ${empty}
|
||||
|
||||
is_arr = is_array ${arr}
|
||||
|
||||
assert_false ${is_arr}
|
||||
end
|
Loading…
Reference in a new issue