smartcalc_tauri/tokinizer/regex_tokinizer/
operator.rs1use alloc::borrow::ToOwned;
8use regex::Regex;
9use crate::config::SmartCalcConfig;
10use crate::{types::*};
11use crate::tokinizer::Tokinizer;
12use crate::token::ui_token::UiTokenType;
13
14pub fn operator_regex_parser(_: &SmartCalcConfig, tokinizer: &mut Tokinizer, group_item: &[Regex]) {
15 for re in group_item.iter() {
16 for capture in re.captures_iter(&tokinizer.data.to_owned()) {
17 if tokinizer.add_token_from_match(&capture.get(0), Some(TokenType::Operator(capture.get(0).unwrap().as_str().chars().next().unwrap()))) {
18 tokinizer.add_uitoken_from_match(capture.get(0), UiTokenType::Operator);
19 }
20 }
21 }
22}
23
24#[cfg(test)]
25mod tests {
26 use crate::types::*;
27 use alloc::string::ToString;
28
29 #[cfg(test)]
30 #[test]
31 fn operator_test_1() {
32 use core::ops::Deref;
33 use crate::tokinizer::regex_tokinizer;
34 use crate::tokinizer::test::setup_tokinizer;
35 use crate::config::SmartCalcConfig;
36 use crate::session::Session;
37 let mut session = Session::new();
38 let config = SmartCalcConfig::default();
39 let mut tokinizer = setup_tokinizer(" - merhaba".to_string(), &mut session, &config);
40
41 regex_tokinizer(&mut tokinizer);
42
43 assert_eq!(tokinizer.token_infos.len(), 2);
44
45 assert_eq!(tokinizer.token_infos[0].start, 1);
46 assert_eq!(tokinizer.token_infos[0].end, 2);
47 assert_eq!(tokinizer.token_infos[0].token_type.borrow().deref(), &Some(TokenType::Operator('-')));
48
49 assert_eq!(tokinizer.token_infos[1].start, 3);
50 assert_eq!(tokinizer.token_infos[1].end, 10);
51 assert_eq!(tokinizer.token_infos[1].token_type.borrow().deref(), &Some(TokenType::Text("merhaba".to_string())));
52 }
53
54 #[cfg(test)]
55 #[test]
56 fn operator_test_2() {
57 use core::ops::Deref;
58 use crate::tokinizer::regex_tokinizer;
59 use crate::tokinizer::test::setup_tokinizer;
60 use alloc::string::ToString;
61 use crate::config::SmartCalcConfig;
62 use crate::session::Session;
63 let mut session = Session::new();
64 let config = SmartCalcConfig::default();
65 let mut tokinizer = setup_tokinizer("- ' * ` /,".to_string(), &mut session, &config);
66
67 regex_tokinizer(&mut tokinizer);
68
69 assert_eq!(tokinizer.token_infos.len(), 6);
70 assert_eq!(tokinizer.token_infos[0].start, 0);
71 assert_eq!(tokinizer.token_infos[0].end, 1);
72 assert_eq!(tokinizer.token_infos[0].token_type.borrow().deref(), &Some(TokenType::Operator('-')));
73
74 assert_eq!(tokinizer.token_infos[1].start, 2);
75 assert_eq!(tokinizer.token_infos[1].end, 3);
76 assert_eq!(tokinizer.token_infos[1].token_type.borrow().deref(), &Some(TokenType::Operator('\'')));
77
78 assert_eq!(tokinizer.token_infos[2].start, 4);
79 assert_eq!(tokinizer.token_infos[2].end, 5);
80 assert_eq!(tokinizer.token_infos[2].token_type.borrow().deref(), &Some(TokenType::Operator('*')));
81
82 assert_eq!(tokinizer.token_infos[3].start, 6);
83 assert_eq!(tokinizer.token_infos[3].end, 7);
84 assert_eq!(tokinizer.token_infos[3].token_type.borrow().deref(), &Some(TokenType::Operator('`')));
85
86 assert_eq!(tokinizer.token_infos[4].start, 8);
87 assert_eq!(tokinizer.token_infos[4].end, 9);
88 assert_eq!(tokinizer.token_infos[4].token_type.borrow().deref(), &Some(TokenType::Operator('/')));
89
90 assert_eq!(tokinizer.token_infos[5].start, 9);
91 assert_eq!(tokinizer.token_infos[5].end, 10);
92 assert_eq!(tokinizer.token_infos[5].token_type.borrow().deref(), &Some(TokenType::Operator(',')));
93 }
94}