smartcalc_tauri/tokinizer/regex_tokinizer/
operator.rs

1/*
2 * smartcalc v1.0.8
3 * Copyright (c) Erhan BARIS (Ruslan Ognyanov Asenov)
4 * Licensed under the GNU General Public License v2.0.
5 */
6
7use 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}