Added parsing for operators and modifiers
This commit is contained in:
parent
964ce47501
commit
565e97905a
@ -5,9 +5,18 @@ mod lib_test;
|
||||
|
||||
fn parse_dice_segments<'a>(cmd: &'a str) -> Vec<regex::Captures<'a>> {
|
||||
let regex = Regex::new(r#"(?x)
|
||||
(?P<op>[+\-/*])?
|
||||
\s*
|
||||
(?:
|
||||
(?:
|
||||
(?P<count>\d+)? # count (optional)
|
||||
d
|
||||
(?P<size>\d+) # dice size
|
||||
(?:d(?P<drop>\d+))?
|
||||
) | (?:
|
||||
(?P<mod>\d+)
|
||||
)
|
||||
)
|
||||
"#).expect("Failed to compile regex");
|
||||
|
||||
regex.captures_iter(cmd).collect()
|
||||
|
||||
@ -3,6 +3,7 @@ use super::*;
|
||||
#[test]
|
||||
fn test_roll_dice() {
|
||||
let mut results = parse_dice_segments("2d6");
|
||||
|
||||
assert_eq!(results.len(), 1);
|
||||
assert_eq!(results[0]["count"], *"2");
|
||||
assert_eq!(results[0]["size"], *"6");
|
||||
@ -10,6 +11,18 @@ fn test_roll_dice() {
|
||||
results = parse_dice_segments("2d6 + 1d20");
|
||||
|
||||
assert_eq!(results.len(), 2);
|
||||
assert_eq!(results[1].name("op").map(|i| i.as_str()), Some("+"));
|
||||
assert_eq!(results[1].name("count").map(|i| i.as_str()), Some("1"));
|
||||
assert_eq!(results[1]["size"], *"20");
|
||||
|
||||
results = parse_dice_segments("4d6d1");
|
||||
|
||||
assert_eq!(results.len(), 1);
|
||||
assert_eq!(results[0].name("drop").map(|i| i.as_str()), Some("1"));
|
||||
|
||||
results = parse_dice_segments("3d8+8");
|
||||
|
||||
assert_eq!(results.len(), 2);
|
||||
assert_eq!(results[1].name("op").map(|i| i.as_str()), Some("+"));
|
||||
assert_eq!(results[1].name("mod").map(|i| i.as_str()), Some("8"));
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user