roan_engine/value/methods/
vec.rs1use crate::{
2 as_cast, native_function,
3 value::Value,
4 vm::native_fn::{NativeFunction, NativeFunctionParam},
5};
6
7native_function!(
8 fn __vec_len(vec) {
9 let vec = as_cast!(vec, Vec);
10
11 Value::Int(vec.len() as i64)
12 }
13);
14
15native_function!(
16 fn __vec_next(vec) {
17 let mut vec = as_cast!(vec, Vec);
18
19 Value::Vec(vec.into_iter().skip(1).collect())
20 }
21);
22
23native_function!(
24 fn __vec_push(vec, value) {
25 let mut vec = as_cast!(vec, Vec);
26 let value = value;
27
28 vec.push(value);
29
30 Value::Vec(vec)
31 }
32);
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37 use crate::value::Value;
38
39 #[test]
40 fn test_vec_len() {
41 let vec = vec![Value::Int(1), Value::Int(2), Value::Int(3)];
42 let result = __vec_len().call(vec![Value::Vec(vec.clone())]).unwrap();
43
44 assert_eq!(result, Value::Int(3));
45 }
46
47 #[test]
48 fn test_vec_next() {
49 let vec = vec![Value::Int(1), Value::Int(2), Value::Int(3)];
50 let result = __vec_next().call(vec![Value::Vec(vec.clone())]).unwrap();
51
52 assert_eq!(result, Value::Vec(vec![Value::Int(2), Value::Int(3)]));
53 }
54
55 #[test]
56 fn test_vec_push() {
57 let vec = vec![Value::Int(1), Value::Int(2), Value::Int(3)];
58 let result = __vec_push()
59 .call(vec![Value::Vec(vec.clone()), Value::Int(4)])
60 .unwrap();
61
62 assert_eq!(
63 result,
64 Value::Vec(vec![
65 Value::Int(1),
66 Value::Int(2),
67 Value::Int(3),
68 Value::Int(4)
69 ])
70 );
71 }
72}