@@ -1428,19 +1428,11 @@ mod tests {
1428
1428
}
1429
1429
1430
1430
fn hir_uclass ( ranges : & [ ( char , char ) ] ) -> Hir {
1431
- let ranges: Vec < hir:: ClassUnicodeRange > = ranges
1432
- . iter ( )
1433
- . map ( |& ( s, e) | hir:: ClassUnicodeRange :: new ( s, e) )
1434
- . collect ( ) ;
1435
- Hir :: class ( hir:: Class :: Unicode ( hir:: ClassUnicode :: new ( ranges) ) )
1431
+ Hir :: class ( uclass ( ranges) )
1436
1432
}
1437
1433
1438
1434
fn hir_bclass ( ranges : & [ ( u8 , u8 ) ] ) -> Hir {
1439
- let ranges: Vec < hir:: ClassBytesRange > = ranges
1440
- . iter ( )
1441
- . map ( |& ( s, e) | hir:: ClassBytesRange :: new ( s, e) )
1442
- . collect ( ) ;
1443
- Hir :: class ( hir:: Class :: Bytes ( hir:: ClassBytes :: new ( ranges) ) )
1435
+ Hir :: class ( bclass ( ranges) )
1444
1436
}
1445
1437
1446
1438
fn hir_case_fold ( expr : Hir ) -> Hir {
@@ -1463,6 +1455,33 @@ mod tests {
1463
1455
}
1464
1456
}
1465
1457
1458
+ fn uclass ( ranges : & [ ( char , char ) ] ) -> hir:: Class {
1459
+ let ranges: Vec < hir:: ClassUnicodeRange > = ranges
1460
+ . iter ( )
1461
+ . map ( |& ( s, e) | hir:: ClassUnicodeRange :: new ( s, e) )
1462
+ . collect ( ) ;
1463
+ hir:: Class :: Unicode ( hir:: ClassUnicode :: new ( ranges) )
1464
+ }
1465
+
1466
+ fn bclass ( ranges : & [ ( u8 , u8 ) ] ) -> hir:: Class {
1467
+ let ranges: Vec < hir:: ClassBytesRange > = ranges
1468
+ . iter ( )
1469
+ . map ( |& ( s, e) | hir:: ClassBytesRange :: new ( s, e) )
1470
+ . collect ( ) ;
1471
+ hir:: Class :: Bytes ( hir:: ClassBytes :: new ( ranges) )
1472
+ }
1473
+
1474
+ #[ cfg( feature = "unicode-case" ) ]
1475
+ fn class_case_fold ( mut cls : hir:: Class ) -> Hir {
1476
+ cls. case_fold_simple ( ) ;
1477
+ Hir :: class ( cls)
1478
+ }
1479
+
1480
+ fn class_negate ( mut cls : hir:: Class ) -> Hir {
1481
+ cls. negate ( ) ;
1482
+ Hir :: class ( cls)
1483
+ }
1484
+
1466
1485
#[ allow( dead_code) ]
1467
1486
fn hir_union ( expr1 : Hir , expr2 : Hir ) -> Hir {
1468
1487
use crate :: hir:: Class :: { Bytes , Unicode } ;
@@ -2522,8 +2541,9 @@ mod tests {
2522
2541
2523
2542
#[ test]
2524
2543
fn class_bracketed ( ) {
2525
- assert_eq ! ( t( "[a]" ) , hir_uclass( & [ ( 'a' , 'a' ) ] ) ) ;
2526
- assert_eq ! ( t( "[^[a]]" ) , hir_negate( hir_uclass( & [ ( 'a' , 'a' ) ] ) ) ) ;
2544
+ assert_eq ! ( t( "[a]" ) , hir_lit( "a" ) ) ;
2545
+ assert_eq ! ( t( "[ab]" ) , hir_uclass( & [ ( 'a' , 'b' ) ] ) ) ;
2546
+ assert_eq ! ( t( "[^[a]]" ) , class_negate( uclass( & [ ( 'a' , 'a' ) ] ) ) ) ;
2527
2547
assert_eq ! ( t( "[a-z]" ) , hir_uclass( & [ ( 'a' , 'z' ) ] ) ) ;
2528
2548
assert_eq ! ( t( "[a-fd-h]" ) , hir_uclass( & [ ( 'a' , 'h' ) ] ) ) ;
2529
2549
assert_eq ! ( t( "[a-fg-m]" ) , hir_uclass( & [ ( 'a' , 'm' ) ] ) ) ;
@@ -2586,11 +2606,11 @@ mod tests {
2586
2606
) ;
2587
2607
assert_eq ! ( t( "(?i-u)[k]" ) , hir_bclass( & [ ( b'K' , b'K' ) , ( b'k' , b'k' ) , ] ) ) ;
2588
2608
2589
- assert_eq ! ( t( "[^a]" ) , hir_negate ( hir_uclass ( & [ ( 'a' , 'a' ) ] ) ) ) ;
2590
- assert_eq ! ( t( r"[^\x00]" ) , hir_negate ( hir_uclass ( & [ ( '\0' , '\0' ) ] ) ) ) ;
2609
+ assert_eq ! ( t( "[^a]" ) , class_negate ( uclass ( & [ ( 'a' , 'a' ) ] ) ) ) ;
2610
+ assert_eq ! ( t( r"[^\x00]" ) , class_negate ( uclass ( & [ ( '\0' , '\0' ) ] ) ) ) ;
2591
2611
assert_eq ! (
2592
2612
t_bytes( "(?-u)[^a]" ) ,
2593
- hir_negate ( hir_bclass ( & [ ( b'a' , b'a' ) ] ) )
2613
+ class_negate ( bclass ( & [ ( b'a' , b'a' ) ] ) )
2594
2614
) ;
2595
2615
#[ cfg( any( feature = "unicode-perl" , feature = "unicode-gencat" ) ) ]
2596
2616
assert_eq ! (
@@ -2778,8 +2798,8 @@ mod tests {
2778
2798
2779
2799
#[ test]
2780
2800
fn class_bracketed_nested ( ) {
2781
- assert_eq ! ( t( r"[a[^c]]" ) , hir_negate ( hir_uclass ( & [ ( 'c' , 'c' ) ] ) ) ) ;
2782
- assert_eq ! ( t( r"[a-b[^c]]" ) , hir_negate ( hir_uclass ( & [ ( 'c' , 'c' ) ] ) ) ) ;
2801
+ assert_eq ! ( t( r"[a[^c]]" ) , class_negate ( uclass ( & [ ( 'c' , 'c' ) ] ) ) ) ;
2802
+ assert_eq ! ( t( r"[a-b[^c]]" ) , class_negate ( uclass ( & [ ( 'c' , 'c' ) ] ) ) ) ;
2783
2803
assert_eq ! ( t( r"[a-c[^c]]" ) , hir_negate( hir_uclass( & [ ] ) ) ) ;
2784
2804
2785
2805
assert_eq ! ( t( r"[^a[^c]]" ) , hir_uclass( & [ ( 'c' , 'c' ) ] ) ) ;
@@ -2788,12 +2808,12 @@ mod tests {
2788
2808
#[ cfg( feature = "unicode-case" ) ]
2789
2809
assert_eq ! (
2790
2810
t( r"(?i)[a[^c]]" ) ,
2791
- hir_negate( hir_case_fold ( hir_uclass ( & [ ( 'c' , 'c' ) ] ) ) )
2811
+ hir_negate( class_case_fold ( uclass ( & [ ( 'c' , 'c' ) ] ) ) )
2792
2812
) ;
2793
2813
#[ cfg( feature = "unicode-case" ) ]
2794
2814
assert_eq ! (
2795
2815
t( r"(?i)[a-b[^c]]" ) ,
2796
- hir_negate( hir_case_fold ( hir_uclass ( & [ ( 'c' , 'c' ) ] ) ) )
2816
+ hir_negate( class_case_fold ( uclass ( & [ ( 'c' , 'c' ) ] ) ) )
2797
2817
) ;
2798
2818
2799
2819
#[ cfg( feature = "unicode-case" ) ]
@@ -3239,6 +3259,10 @@ mod tests {
3239
3259
assert ! ( props( r"ab" ) . is_literal( ) ) ;
3240
3260
assert ! ( props( r"abc" ) . is_literal( ) ) ;
3241
3261
assert ! ( props( r"(?m)abc" ) . is_literal( ) ) ;
3262
+ assert ! ( props( r"(?:a)" ) . is_literal( ) ) ;
3263
+ assert ! ( props( r"foo(?:a)" ) . is_literal( ) ) ;
3264
+ assert ! ( props( r"(?:a)foo" ) . is_literal( ) ) ;
3265
+ assert ! ( props( r"[a]" ) . is_literal( ) ) ;
3242
3266
3243
3267
// Negative examples.
3244
3268
assert ! ( !props( r"" ) . is_literal( ) ) ;
@@ -3248,7 +3272,7 @@ mod tests {
3248
3272
assert ! ( !props( r"a+" ) . is_literal( ) ) ;
3249
3273
assert ! ( !props( r"foo(a)" ) . is_literal( ) ) ;
3250
3274
assert ! ( !props( r"(a)foo" ) . is_literal( ) ) ;
3251
- assert ! ( !props( r"[a ]" ) . is_literal( ) ) ;
3275
+ assert ! ( !props( r"[ab ]" ) . is_literal( ) ) ;
3252
3276
}
3253
3277
3254
3278
#[ test]
@@ -3262,6 +3286,11 @@ mod tests {
3262
3286
assert ! ( props( r"a|b|c" ) . is_alternation_literal( ) ) ;
3263
3287
assert ! ( props( r"foo|bar" ) . is_alternation_literal( ) ) ;
3264
3288
assert ! ( props( r"foo|bar|baz" ) . is_alternation_literal( ) ) ;
3289
+ assert ! ( props( r"[a]" ) . is_alternation_literal( ) ) ;
3290
+ assert ! ( props( r"[a]|b" ) . is_alternation_literal( ) ) ;
3291
+ assert ! ( props( r"a|[b]" ) . is_alternation_literal( ) ) ;
3292
+ assert ! ( props( r"(?:a)|b" ) . is_alternation_literal( ) ) ;
3293
+ assert ! ( props( r"a|(?:b)" ) . is_alternation_literal( ) ) ;
3265
3294
3266
3295
// Negative examples.
3267
3296
assert ! ( !props( r"" ) . is_alternation_literal( ) ) ;
@@ -3270,9 +3299,9 @@ mod tests {
3270
3299
assert ! ( !props( r"a+" ) . is_alternation_literal( ) ) ;
3271
3300
assert ! ( !props( r"foo(a)" ) . is_alternation_literal( ) ) ;
3272
3301
assert ! ( !props( r"(a)foo" ) . is_alternation_literal( ) ) ;
3273
- assert ! ( !props( r"[a ]" ) . is_alternation_literal( ) ) ;
3274
- assert ! ( !props( r"[a ]|b" ) . is_alternation_literal( ) ) ;
3275
- assert ! ( !props( r"a|[b ]" ) . is_alternation_literal( ) ) ;
3302
+ assert ! ( !props( r"[ab ]" ) . is_alternation_literal( ) ) ;
3303
+ assert ! ( !props( r"[ab ]|b" ) . is_alternation_literal( ) ) ;
3304
+ assert ! ( !props( r"a|[ab ]" ) . is_alternation_literal( ) ) ;
3276
3305
assert ! ( !props( r"(a)|b" ) . is_alternation_literal( ) ) ;
3277
3306
assert ! ( !props( r"a|(b)" ) . is_alternation_literal( ) ) ;
3278
3307
}
0 commit comments