@@ -41,7 +41,7 @@ impl Display for DiceWords {
41
41
DiceWords :: Bonus ( d) => write ! ( fmt, "{}" , d) ,
42
42
DiceWords :: Multiplier ( d) => write ! ( fmt, "{}" , d) ,
43
43
DiceWords :: Plus => write ! ( fmt, "+" ) ,
44
- DiceWords :: Minus => write ! ( fmt, "- " ) ,
44
+ DiceWords :: Minus => write ! ( fmt, "\u{2212} " ) ,
45
45
DiceWords :: Times => write ! ( fmt, "\u{00d7} " ) ,
46
46
DiceWords :: Other ( s) | DiceWords :: Comment ( s) => write ! ( fmt, "|{}|" , s) ,
47
47
DiceWords :: Total ( t) => write ! ( fmt, "= {}" , t) ,
@@ -73,7 +73,7 @@ impl FromStr for DiceWords {
73
73
}
74
74
}
75
75
76
- #[ derive( Clone , Debug , PartialEq ) ]
76
+ #[ derive( Clone , Debug , PartialEq , Eq ) ]
77
77
pub enum RollParseError {
78
78
DiceError ( DiceParseError ) ,
79
79
InvalidOrder ,
@@ -567,6 +567,34 @@ mod test {
567
567
assert ! ( matches!( rs. words[ 3 ] , DiceWords :: Total ( _) ) ) ;
568
568
}
569
569
570
+ #[ test]
571
+ fn regular_minus ( ) {
572
+ let rs = "d8-2" . parse :: < RollSet > ( ) . unwrap ( ) ;
573
+ assert_eq ! ( rs. words. len( ) , 4 ) ;
574
+
575
+ let roll = unwrap_dice ! ( & rs. words[ 0 ] ) ;
576
+ assert_eq ! ( roll. rolls( ) . len( ) , 1 ) ;
577
+ assert_eq ! ( roll. sides( ) , 8 ) ;
578
+
579
+ assert_eq ! ( rs. words[ 1 ] , DiceWords :: Minus ) ;
580
+ assert_eq ! ( rs. words[ 2 ] , DiceWords :: Bonus ( 2 ) ) ;
581
+ assert ! ( matches!( rs. words[ 3 ] , DiceWords :: Total ( _) ) ) ;
582
+ }
583
+
584
+ #[ test]
585
+ fn unicrud_minus ( ) {
586
+ let rs = "d8\u{2212} 2" . parse :: < RollSet > ( ) . unwrap ( ) ;
587
+ assert_eq ! ( rs. words. len( ) , 4 ) ;
588
+
589
+ let roll = unwrap_dice ! ( & rs. words[ 0 ] ) ;
590
+ assert_eq ! ( roll. rolls( ) . len( ) , 1 ) ;
591
+ assert_eq ! ( roll. sides( ) , 8 ) ;
592
+
593
+ assert_eq ! ( rs. words[ 1 ] , DiceWords :: Minus ) ;
594
+ assert_eq ! ( rs. words[ 2 ] , DiceWords :: Bonus ( 2 ) ) ;
595
+ assert ! ( matches!( rs. words[ 3 ] , DiceWords :: Total ( _) ) ) ;
596
+ }
597
+
570
598
#[ test]
571
599
fn test_only_penalty ( ) {
572
600
let rs = "3d8-2" . parse :: < RollSet > ( ) . unwrap ( ) ;
@@ -754,7 +782,7 @@ mod test {
754
782
#[ test]
755
783
fn many_rollv_str ( ) {
756
784
let rs = "d1 + 2d1 - 4 to hit" . parse :: < RollSet > ( ) . unwrap ( ) ;
757
- assert_eq ! ( "1d1 [1] + 2d1 [2] - 4 |to hit| = -1" , format!( "{}" , rs) ) ;
785
+ assert_eq ! ( "1d1 [1] + 2d1 [2] \u{2212} 4 |to hit| = -1" , format!( "{}" , rs) ) ;
758
786
}
759
787
760
788
#[ test]
@@ -778,7 +806,7 @@ mod test {
778
806
779
807
#[ test]
780
808
fn more_like_chat ( ) {
781
- let line = "/roll d1 + 2d1 - 4 to hit; 1d1 for damage" ;
809
+ let line = "/roll d1 + 2d1 \u{2212} 4 to hit; 1d1 for damage" ;
782
810
let chatter: Vec < & str > = line. splitn ( 2 , char:: is_whitespace) . collect ( ) ;
783
811
assert_eq ! ( chatter. len( ) , 2 ) ;
784
812
assert ! ( chatter[ 0 ] . starts_with( "/r" ) ) ;
@@ -793,7 +821,7 @@ mod test {
793
821
} ) ;
794
822
795
823
assert ! ( rolls. is_ok( ) ) ;
796
- assert_eq ! ( rolls. unwrap( ) , "rolls 1d1 [1] + 2d1 [2] - 4 |to hit| = -1; 1d1 [1] |for damage| = 1" ) ;
824
+ assert_eq ! ( rolls. unwrap( ) , "rolls 1d1 [1] + 2d1 [2] \u{2212} 4 |to hit| = -1; 1d1 [1] |for damage| = 1" ) ;
797
825
}
798
826
799
827
#[ test]
@@ -822,7 +850,7 @@ mod test {
822
850
823
851
#[ test]
824
852
fn multiplier_other_ok ( ) {
825
- assert ! ( "1d20+4+1d6-3*1.5 for ham + 4 - 1d6 foo" . parse:: <RollSet >( ) . is_ok( ) ) ;
853
+ assert ! ( "1d20+4+1d6-3*1.5 for ham + 4 \u{2212} 1d6 foo" . parse:: <RollSet >( ) . is_ok( ) ) ;
826
854
}
827
855
828
856
#[ test]
0 commit comments