mirror of
https://github.com/fluencelabs/aquavm
synced 2025-04-24 14:52:15 +00:00
fix(execution-engine): quickfix for canon map iteration order (#845)
An O(n) quickfix for the canon map reverse iteration bug.
This commit is contained in:
parent
c611ae584b
commit
038637f94d
@ -123,6 +123,12 @@ pub(crate) fn create_canon_stream_map_iterable_value(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// the reverse iteration of the original data produce `values` in reverse order;
|
||||||
|
// the spec requires direct order of iteration, so reverse it one more time
|
||||||
|
//
|
||||||
|
// it can be solved at O(1) with special handling of reversed iterators in fold,
|
||||||
|
// so this O(n) implementation is just a quick fix
|
||||||
|
values.reverse();
|
||||||
|
|
||||||
let iterable_ingredients = CanonStreamMapIterableIngredients::init(values);
|
let iterable_ingredients = CanonStreamMapIterableIngredients::init(values);
|
||||||
let iterable = Box::new(iterable_ingredients);
|
let iterable = Box::new(iterable_ingredients);
|
||||||
|
@ -955,12 +955,12 @@ async fn fold_canon_stream_map() {
|
|||||||
(seq
|
(seq
|
||||||
(seq
|
(seq
|
||||||
(seq
|
(seq
|
||||||
(ap ("key" "value4") %map)
|
(ap ("key" "value1") %map)
|
||||||
(ap (-42 "value3") %map)
|
(ap (-42 "value2") %map)
|
||||||
)
|
)
|
||||||
(seq
|
(seq
|
||||||
(ap (-42 "value2") %map)
|
(ap (-42 "value3") %map)
|
||||||
(ap ("key" "value1") %map)
|
(ap ("key" "value4") %map)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(seq
|
(seq
|
||||||
@ -986,8 +986,8 @@ async fn fold_canon_stream_map() {
|
|||||||
let mut cid_tracker: ExecutionCidState = ExecutionCidState::new();
|
let mut cid_tracker: ExecutionCidState = ExecutionCidState::new();
|
||||||
let tetraplet = json!({"function_name": "", "lens": "", "peer_pk": vm_1_peer_id, "service_id": ""});
|
let tetraplet = json!({"function_name": "", "lens": "", "peer_pk": vm_1_peer_id, "service_id": ""});
|
||||||
|
|
||||||
let map_value_2 = json!({"key": -42, "value": "value2"});
|
|
||||||
let map_value_1 = json!({"key": "key", "value": "value1"});
|
let map_value_1 = json!({"key": "key", "value": "value1"});
|
||||||
|
let map_value_2 = json!({"key": -42, "value": "value2"});
|
||||||
let map_value_3 = json!({"key": -42, "value": "value3"});
|
let map_value_3 = json!({"key": -42, "value": "value3"});
|
||||||
let map_value_4 = json!({"key": "key", "value": "value4"});
|
let map_value_4 = json!({"key": "key", "value": "value4"});
|
||||||
|
|
||||||
@ -999,13 +999,8 @@ async fn fold_canon_stream_map() {
|
|||||||
canon_tracked(
|
canon_tracked(
|
||||||
json!({"tetraplet": tetraplet,
|
json!({"tetraplet": tetraplet,
|
||||||
"values": [
|
"values": [
|
||||||
{
|
|
||||||
"result": map_value_4,
|
|
||||||
"tetraplet": tetraplet,
|
|
||||||
"provenance": Provenance::Literal,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"result": map_value_3,
|
"result": map_value_1,
|
||||||
"tetraplet": tetraplet,
|
"tetraplet": tetraplet,
|
||||||
"provenance": Provenance::Literal,
|
"provenance": Provenance::Literal,
|
||||||
},
|
},
|
||||||
@ -1015,7 +1010,12 @@ async fn fold_canon_stream_map() {
|
|||||||
"provenance": Provenance::Literal,
|
"provenance": Provenance::Literal,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"result": map_value_1,
|
"result": map_value_3,
|
||||||
|
"tetraplet": tetraplet,
|
||||||
|
"provenance": Provenance::Literal,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"result": map_value_4,
|
||||||
"tetraplet": tetraplet,
|
"tetraplet": tetraplet,
|
||||||
"provenance": Provenance::Literal,
|
"provenance": Provenance::Literal,
|
||||||
},
|
},
|
||||||
@ -1023,20 +1023,20 @@ async fn fold_canon_stream_map() {
|
|||||||
&mut cid_tracker,
|
&mut cid_tracker,
|
||||||
),
|
),
|
||||||
scalar_tracked!(
|
scalar_tracked!(
|
||||||
map_value_1.clone(),
|
map_value_3.clone(),
|
||||||
cid_tracker,
|
cid_tracker,
|
||||||
peer = &vm_1_peer_id,
|
peer = &vm_1_peer_id,
|
||||||
service = "m..0",
|
service = "m..0",
|
||||||
function = "f",
|
function = "f",
|
||||||
args = [map_value_1]
|
args = [map_value_3]
|
||||||
),
|
),
|
||||||
scalar_tracked!(
|
scalar_tracked!(
|
||||||
map_value_2.clone(),
|
map_value_4.clone(),
|
||||||
cid_tracker,
|
cid_tracker,
|
||||||
peer = vm_1_peer_id,
|
peer = vm_1_peer_id,
|
||||||
service = "m..0",
|
service = "m..0",
|
||||||
function = "f",
|
function = "f",
|
||||||
args = [map_value_2]
|
args = [map_value_4]
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user