mirror of
https://github.com/fluencelabs/aquavm
synced 2024-12-04 23:20:18 +00:00
Fix bug with empty arrays in match (#207)
This commit is contained in:
parent
e6193ea4de
commit
401d8c06fa
@ -47,6 +47,11 @@ pub(crate) fn are_matchable_eq<'ctx>(
|
|||||||
compare_matchable(matchable, exec_ctx, make_string_comparator(value))
|
compare_matchable(matchable, exec_ctx, make_string_comparator(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(EmptyArray, EmptyArray) => Ok(true),
|
||||||
|
(EmptyArray, matchable) | (matchable, EmptyArray) => {
|
||||||
|
compare_matchable(matchable, exec_ctx, make_object_comparator(JValue::Array(vec![])))
|
||||||
|
}
|
||||||
|
|
||||||
(Boolean(left_boolean), Boolean(right_boolean)) => Ok(left_boolean == right_boolean),
|
(Boolean(left_boolean), Boolean(right_boolean)) => Ok(left_boolean == right_boolean),
|
||||||
(Boolean(value), matchable) | (matchable, Boolean(value)) => {
|
(Boolean(value), matchable) | (matchable, Boolean(value)) => {
|
||||||
compare_matchable(matchable, exec_ctx, make_object_comparator((*value).into()))
|
compare_matchable(matchable, exec_ctx, make_object_comparator((*value).into()))
|
||||||
@ -63,7 +68,6 @@ pub(crate) fn are_matchable_eq<'ctx>(
|
|||||||
|
|
||||||
Ok(left_value == right_value)
|
Ok(left_value == right_value)
|
||||||
}
|
}
|
||||||
_ => Ok(false),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
50
air/tests/test_module/issues/issue_206.rs
Normal file
50
air/tests/test_module/issues/issue_206.rs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 Fluence Labs Limited
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use air_test_utils::prelude::*;
|
||||||
|
|
||||||
|
use fstrings::f;
|
||||||
|
use fstrings::format_args_f;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
// test for github.com/fluencelabs/aquavm/issues/206
|
||||||
|
fn issue_206() {
|
||||||
|
let peer_1_id = "peer_1_id";
|
||||||
|
let mut peer_1 = create_avm(echo_call_service(), peer_1_id);
|
||||||
|
|
||||||
|
let script = f!(r#"
|
||||||
|
(new $result
|
||||||
|
(seq
|
||||||
|
(xor
|
||||||
|
(match $result []
|
||||||
|
(xor
|
||||||
|
(ap "is nil" $result)
|
||||||
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(ap "not" $result)
|
||||||
|
)
|
||||||
|
(call %init_peer_id% ("op" "identity") [$result] result-fix)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
"#);
|
||||||
|
|
||||||
|
let result = checked_call_vm!(peer_1, peer_1_id, &script, "", "");
|
||||||
|
|
||||||
|
let actual_trace = trace_from_result(&result);
|
||||||
|
let expected_trace = vec![executed_state::ap(Some(0)), executed_state::scalar(json!(["is nil"]))];
|
||||||
|
assert_eq!(actual_trace, expected_trace);
|
||||||
|
}
|
@ -19,3 +19,4 @@ mod issue_173;
|
|||||||
mod issue_177;
|
mod issue_177;
|
||||||
mod issue_178;
|
mod issue_178;
|
||||||
mod issue_180;
|
mod issue_180;
|
||||||
|
mod issue_206;
|
||||||
|
Loading…
Reference in New Issue
Block a user