use rec::rec; #[test] fn range() { #[rec] const RANGE: Rec = 'a'..'z'; assert_eq!(RANGE.to_string(), "[a-z]"); } #[test] fn unite_chars() { #[rec] const SINGLE_UNION: Rec = 'a' | 'c'; assert_eq!(SINGLE_UNION, "[ac]"); } #[test] fn unite_range_and_char() { #[rec] const RANGE_OR_CHAR: Rec = ('0'..'9') | 'a'; assert_eq!(RANGE_OR_CHAR, "[0-9a]"); } #[test] fn unite_char_and_range() { #[rec] const CHAR_OR_RANGE: Rec = 'a' | ('0'..'9'); assert_eq!(CHAR_OR_RANGE, "[0-9a]"); } #[test] fn unite_multiple_chars() { #[rec] const MULTIPLE_UNION: Rec = 'a' | 'x' | 'z'; assert_eq!(MULTIPLE_UNION, "[axz]"); } #[test] fn intersect_char_and_union() { #[rec] const INTERSECT_CHAR_AND_UNION: Rec = 'a' & ('a' | 'b'); assert_eq!(INTERSECT_CHAR_AND_UNION, "[a]"); } #[test] fn intersect_char_and_range() { #[rec] const INTERSECT_CHAR_AND_RANGE: Rec = 'a' & ('a'..'e'); assert_eq!(INTERSECT_CHAR_AND_RANGE, "[a]"); } #[test] fn intersect_two_ranges() { #[rec] const INTERSECT_TWO_RANGES: Rec = ('a'..'e') & ('c'..'g'); assert_eq!(INTERSECT_TWO_RANGES, "[c-e]"); } #[test] fn intersect_range_and_union() { #[rec] const INTERSECT_RANGE_AND_UNION: Rec = ('a'..'f') & ('a' | 'b'); assert_eq!(INTERSECT_RANGE_AND_UNION, "[a-b]"); } #[test] fn intersect_two_unions() { #[rec] const INTERSECT_TWO_UNIONS: Rec = ('a' | 'b') & ('a' | 'b' | 'c'); assert_eq!(INTERSECT_TWO_UNIONS, "[a-b]"); } #[test] fn negate_char() { #[rec] const NEGATE_CHAR: Rec = !'b'; assert_eq!(NEGATE_CHAR, "[\u{0}-ac-\u{10ffff}]"); } #[test] fn negate_range() { #[rec] const NEGATE_RANGE: Rec = !('w'..'y'); assert_eq!(NEGATE_RANGE, "[\u{0}-vz-\u{10ffff}]"); } #[test] fn negate_union() { #[rec] const NEGATE_UNION: Rec = !('b' | 'y'); assert_eq!(NEGATE_UNION, "[\u{0}-ac-xz-\u{10ffff}]"); } #[test] fn negate_intersection() { #[rec] const NEGATE_INTERSECTION: Rec = !(('b'..'d') & ('a'..'g')); assert_eq!(NEGATE_INTERSECTION, "[\u{0}-ae-\u{10ffff}]"); }