Skip to content
This repository was archived by the owner on May 7, 2024. It is now read-only.

Commit 0f00a93

Browse files
PaoloPenazzilm98
authored andcommitted
test: refactor export creation and fix rep tests
1 parent 5b524a7 commit 0f00a93

File tree

1 file changed

+70
-108
lines changed

1 file changed

+70
-108
lines changed

src/core/lang/execution.rs

Lines changed: 70 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ mod test {
3636
use crate::core::context::context::Context;
3737
use crate::core::export::export::Export;
3838
use crate::core::lang::execution::round;
39-
use crate::core::lang::lang::{branch, foldhood, nbr, rep};
39+
use crate::core::lang::lang::{branch, foldhood, mid, nbr, rep};
4040
use crate::core::path::path::path::Path;
4141
use crate::core::path::slot::slot::Slot::{FoldHood, Nbr, Rep};
4242
use crate::core::sensor_id::sensor_id::SensorId;
4343
use crate::core::vm::round_vm::round_vm::RoundVM;
44+
use crate::export;
45+
use crate::path;
4446

4547
fn init_vm() -> RoundVM {
4648
let context = Context::new(0, Default::default(), Default::default(), Default::default());
@@ -83,82 +85,73 @@ mod test {
8385

8486
#[test]
8587
fn test_local_value() {
86-
let context = Context::new(0,
87-
Default::default(),
88-
Default::default(),
89-
Default::default());
88+
let context = Context::new(0, Default::default(), Default::default(), Default::default());
9089
let result = round(init_with_ctx(context), |vm| (vm, 10));
9190
assert_eq!(10, result.1);
9291
}
9392

9493
#[test]
9594
fn test_alignment() {
9695
// No neighbor is aligned
97-
let context = Context::new(0, Default::default(),
98-
Default::default(), Default::default());
99-
let result = round(init_with_ctx(context),
100-
|vm1| rep(vm1, || 0, |vm2, _| {
101-
foldhood(vm2, || 0,
102-
| a, b | (a + b), || 1 )}));
96+
let context = Context::new(0, Default::default(), Default::default(), Default::default());
97+
// Program: rep(0, foldhood(0)(_ + _)(1))
98+
let program = |vm1| rep(vm1,
99+
|| 0,
100+
|vm2, _| { foldhood(vm2,
101+
|| 0,
102+
| a, b | (a + b),
103+
|vm3| (vm3, 1))});
104+
let result = round(init_with_ctx(context), program);
103105
assert_eq!(1, result.1);
104106

105107
// One neighbor is aligned
106-
let mut exports: HashMap<i32, Export> = HashMap::new();
107-
exports.insert(1, create_export());
108-
109-
let context = Context::new(0, Default::default(),
110-
Default::default(), exports);
111-
112-
let result = round(init_with_ctx(context),
113-
|vm1| rep(vm1, || 0, |vm2, _| {
114-
foldhood(vm2, || 0,
115-
| a, b| (a + b), || 1 )}));
108+
// Export: Map(1 -> Export(Rep(0) -> 1, Rep(0) / FoldHood(0) -> 1))
109+
let context = Context::new(0, Default::default(), Default::default(), create_export_alignment_test());
110+
let result = round(init_with_ctx(context), program);
116111
assert_eq!(2, result.1);
117112
}
118113

119-
fn create_export() -> Export {
120-
let mut map: HashMap<Path, Box<dyn Any>> = HashMap::new();
121-
map.insert(Path::from(vec![Rep(0)]), Box::new(1));
122-
map.insert(Path::from(vec![Rep(0),FoldHood(0)]), Box::new(1));
123-
Export::from(map)
124-
}
125-
126-
fn create_context_foldhood_test() -> Context {
127-
// Export of device 2: Export(/ -> "1", FoldHood(0) -> "1")
128-
let mut exports_device_2: HashMap<Path, Box<dyn Any>> = HashMap::new();
129-
exports_device_2.insert(Path::from(vec![FoldHood(0)]), Box::new(1));
130-
exports_device_2.insert(Path::from(vec![]), Box::new(1));
131-
// Export of device 4: Export(/ -> "3", FoldHood(0) -> "3")
132-
let mut exports_device_4: HashMap<Path, Box<dyn Any>> = HashMap::new();
133-
exports_device_4.insert(Path::from(vec![FoldHood(0)]), Box::new(3));
134-
exports_device_4.insert(Path::from(vec![]), Box::new(3));
135-
// Exports of the context: Map(2 -> Export(/ -> "a", FoldHood(0) -> "a"), 4 -> Export(/ -> "b", FoldHood(0) -> "b"))
114+
fn create_export_alignment_test() -> HashMap<i32, Export> {
115+
let export_dev_1 = export!((path!(Rep(0)), 1), (path!(Rep(0), FoldHood(0)), 1));
136116
let mut exports: HashMap<i32, Export> = HashMap::new();
137-
exports.insert(2, Export::from(exports_device_2));
138-
exports.insert(4, Export::from(exports_device_4));
139-
// Context of the device
140-
let context = Context::new(0, Default::default(), Default::default(), exports);
141-
return context;
117+
exports.insert(1, export_dev_1);
118+
exports
142119
}
143120

144121
#[test]
145122
fn test_foldhood() {
146-
// Context of the device
147-
let context = create_context_foldhood_test();
148-
// Aggregate program in Scala: foldhood("1")(_ + _)("2")
149-
let result = round(init_with_ctx(context),
150-
|vm| foldhood(vm, || 1,
151-
| a, b| (a + b), || 2 ));
123+
let context = Context::new(0, Default::default(), Default::default(), create_export_foldhood_test());
124+
// Program: foldhood(1)(_ + _)(2)
125+
let program = |vm| foldhood(vm,
126+
|| 1,
127+
| a, b| (a + b),
128+
|vm1| (vm1, 2));
129+
let result = round(init_with_ctx(context), program);
152130
assert_eq!(7, result.1);
153131

154-
// TODO
155-
//let context = create_context_foldhood_test();
156-
// Aggregate program in Scala: foldhood("-5")(_ + _)(if (nbr(false)) {0} else {1})
157-
//let result = round(init_with_ctx(context),
158-
//|vm| foldhood(vm, || -5,
159-
// | a, b| (a + b),
160-
//|vm1| if nbr(vm1, || false).1 {0} else {1} ));
161-
//assert_eq!(-14, result.1);
132+
let context = Context::new(0, Default::default(), Default::default(), create_export_foldhood_test());
133+
// Program: foldhood(-5)(_ + _)(if (nbr(false)) {0} else {1})
134+
let program = |vm| foldhood(vm,
135+
|| -5,
136+
| a, b| (a + b),
137+
|vm1| {
138+
let (vm2, res) = nbr(vm1, || false);
139+
if res { (vm2, 0) } else { (vm2, 1) }
140+
});
141+
let result = round(init_with_ctx(context), program);
142+
assert_eq!(-14, result.1);
143+
}
144+
145+
fn create_export_foldhood_test() -> HashMap<i32, Export> {
146+
// Export of device 2: Export(/ -> "1", FoldHood(0) -> "1")
147+
let export_dev_2 = export!((path!(), 1), (path!(FoldHood(0)), 1));
148+
// Export of device 4: Export(/ -> "3", FoldHood(0) -> "3")
149+
let export_dev_4 = export!((path!(), 3), (path!(FoldHood(0)), 3));
150+
// Exports of the context: Map(2 -> Export(/ -> "a", FoldHood(0) -> "a"), 4 -> Export(/ -> "b", FoldHood(0) -> "b"))
151+
let mut exports: HashMap<i32, Export> = HashMap::new();
152+
exports.insert(2, export_dev_2);
153+
exports.insert(4, export_dev_4);
154+
exports
162155
}
163156

164157
#[test]
@@ -169,36 +162,30 @@ mod test {
169162
assert_eq!(7, result.1);
170163

171164
// 2 - NBR should support interaction between aligned devices
172-
// let context = create_context_nbr_test2();
173-
// The following program is run: foldhood(0)(_ + _)(if (nbr(mid()) == mid()) 0 else 1)
174-
// TODO
175-
//let program = |vm| foldhood(vm,
176-
// || 0,
177-
// | a, b| (a + b),
178-
// |vm1| if nbr(vm1, mid()) == mid() {0} else {1} );
165+
let context = Context::new(0, Default::default(), Default::default(), create_exports_nbr_test());
166+
// Program: foldhood(0)(_ + _)(if (nbr(mid()) == mid()) 0 else 1)
167+
/*let program = |vm| foldhood(vm,
168+
|| 0,
169+
| a, b| (a + b),
170+
|vm1| {
171+
let (vm2, res) = nbr(vm1, || mid(vm3));
172+
if res.1 == mid(vm2).1 { (res.0, 0) } else { (res.0, 1) }
173+
}); */
179174
//let result = round(init_with_ctx(context), program);
180-
// assert_eq!(2, result.1);
175+
//assert_eq!(2, result.1);
181176
}
182177

183-
fn create_context_nbr_test2() -> Context {
178+
fn create_exports_nbr_test() -> HashMap<i32, Export> {
184179
// Create this export: Map(
185180
// 1 -> Export(/ -> "any", FoldHood(0) -> 1, FoldHood(0) / Nbr(0) -> 1),
186181
// 2 -> Export(/ -> "any", FoldHood(0) -> 2, FoldHood(0) / Nbr(0) -> 2)
187182
// )
188-
let mut export_dev_1: HashMap<Path, Box<dyn Any>> = HashMap::new();
189-
export_dev_1.insert(Path::from(vec![]), Box::new("any"));
190-
export_dev_1.insert(Path::from(vec![FoldHood(0)]), Box::new(1));
191-
export_dev_1.insert(Path::from(vec![FoldHood(0), Nbr(0)]), Box::new(1));
192-
let mut export_dev_2: HashMap<Path, Box<dyn Any>> = HashMap::new();
193-
export_dev_2.insert(Path::from(vec![]), Box::new("any"));
194-
export_dev_2.insert(Path::from(vec![FoldHood(0)]), Box::new(2));
195-
export_dev_2.insert(Path::from(vec![FoldHood(0), Nbr(0)]), Box::new(2));
183+
let export_dev_1 = export!((path!(), "any"), (path!(FoldHood(0)), 1), (path!(FoldHood(0), Nbr(0)), 1));
184+
let export_dev_2 = export!((path!(), "any"), (path!(FoldHood(0)), 2), (path!(FoldHood(0), Nbr(0)), 2));
196185
let mut exports: HashMap<i32, Export> = HashMap::new();
197-
exports.insert(1, Export::from(export_dev_1));
198-
exports.insert(2, Export::from(export_dev_2));
199-
// Context of the device
200-
let context = Context::new(0, Default::default(), Default::default(), exports);
201-
context
186+
exports.insert(1, export_dev_1);
187+
exports.insert(2, export_dev_2);
188+
exports
202189
}
203190

204191
#[test]
@@ -219,11 +206,9 @@ mod test {
219206
}
220207

221208
fn create_exports_rep_test() -> HashMap<i32, Export> {
222-
let mut export_dev_0: HashMap<Path, Box<dyn Any>> = HashMap::new();
223-
export_dev_0.insert(Path::from(vec![Rep(0)]), Box::new(7));
209+
let export_dev_0= export!((path!(Rep(0)), 7));
224210
let mut exports: HashMap<i32, Export> = HashMap::new();
225-
exports.insert(0, Export::from(export_dev_0));
226-
// print!("{:?}", exports.get(&0).unwrap().get::<i32>(&Path::from(vec![Rep(0)])));
211+
exports.insert(0, export_dev_0);
227212
exports
228213
}
229214

@@ -253,32 +238,9 @@ mod test {
253238
}
254239

255240
fn create_exports_branch_test() -> HashMap<i32, Export> {
256-
let mut export_dev_0: HashMap<Path, Box<dyn Any>> = HashMap::new();
257-
export_dev_0.insert(Path::from(vec![Rep(0)]), Box::new(1));
241+
let export_dev_0= export!((path!(Rep(0)), 1));
258242
let mut exports: HashMap<i32, Export> = HashMap::new();
259-
exports.insert(0, Export::from(export_dev_0));
243+
exports.insert(0, export_dev_0);
260244
exports
261245
}
262-
263-
#[test]
264-
fn test_sense() {
265-
let context = Context::new(0, create_local_sensors(), Default::default(), Default::default());
266-
// let result = round(init_with_ctx(context), |vm| sense(vm, |vm1, a| (vm1, a)));
267-
}
268-
269-
fn create_local_sensors() -> HashMap<SensorId, Box<dyn Any>> {
270-
// Sensors: Map("a" -> 7, "b" -> "high")
271-
let mut sensors: HashMap<SensorId, Box<dyn Any>> = HashMap::new();
272-
sensors.insert(SensorId::new("a".to_string()), Box::new(7));
273-
sensors.insert(SensorId::new("b".to_string()), Box::new("high"));
274-
sensors
275-
}
276-
277-
278-
279-
// Export: Map(
280-
// 1 -> Export(FoldHood(0) -> 1)
281-
// 2 -> Export(FoldHood(0) -> 2)
282-
// )
283-
// Program: foldhood(1)(_+_)(sense("a"))
284246
}

0 commit comments

Comments
 (0)