1
1
pub fn run_length_encoding ( target : & str ) -> String {
2
2
if target. trim ( ) . is_empty ( ) {
3
- return "String is Empty! " . to_string ( ) ;
3
+ return "" . to_string ( ) ;
4
4
}
5
5
let mut count: i32 = 0 ;
6
6
let mut base_character: String = "" . to_string ( ) ;
@@ -27,9 +27,8 @@ pub fn run_length_encoding(target: &str) -> String {
27
27
28
28
pub fn run_length_decoding ( target : & str ) -> String {
29
29
if target. trim ( ) . is_empty ( ) {
30
- return "String is Empty! " . to_string ( ) ;
30
+ return "" . to_string ( ) ;
31
31
}
32
-
33
32
let mut character_count: String = String :: new ( ) ;
34
33
let mut decoded_target = String :: new ( ) ;
35
34
@@ -55,61 +54,25 @@ pub fn run_length_decoding(target: &str) -> String {
55
54
mod tests {
56
55
use super :: * ;
57
56
58
- #[ test]
59
- fn encode_empty ( ) {
60
- assert_eq ! ( run_length_encoding( "" ) , "String is Empty!" )
61
- }
62
-
63
- #[ test]
64
- fn encode_identical_character ( ) {
65
- assert_eq ! ( run_length_encoding( "aaaaaaaaaa" ) , "10a" )
66
- }
67
- #[ test]
68
- fn encode_continuous_character ( ) {
69
- assert_eq ! ( run_length_encoding( "abcdefghijk" ) , "1a1b1c1d1e1f1g1h1i1j1k" )
70
- }
71
-
72
- #[ test]
73
- fn encode_random_character ( ) {
74
- assert_eq ! ( run_length_encoding( "aaaaabbbcccccdddddddddd" ) , "5a3b5c10d" )
75
- }
76
-
77
- #[ test]
78
- fn encode_long_character ( ) {
79
- assert_eq ! (
80
- run_length_encoding(
81
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbcccccdddddddddd"
82
- ) ,
83
- "200a3b5c10d"
84
- )
85
- }
86
- #[ test]
87
- fn decode_empty ( ) {
88
- assert_eq ! ( run_length_decoding( "" ) , "String is Empty!" )
89
- }
90
-
91
- #[ test]
92
- fn decode_identical_character ( ) {
93
- assert_eq ! ( run_length_decoding( "10a" ) , "aaaaaaaaaa" )
94
- }
95
- #[ test]
96
- fn decode_continuous_character ( ) {
97
- assert_eq ! ( run_length_decoding( "1a1b1c1d1e1f1g1h1i1j1k" ) , "abcdefghijk" )
98
- }
99
-
100
- #[ test]
101
- fn decode_random_character ( ) {
102
- assert_eq ! (
103
- run_length_decoding( "5a3b5c10d" ) . to_string( ) ,
104
- "aaaaabbbcccccdddddddddd"
105
- )
57
+ macro_rules! test_run_length {
58
+ ( $( $name: ident: $test_case: expr, ) * ) => {
59
+ $(
60
+ #[ test]
61
+ fn $name( ) {
62
+ let ( raw_str, encoded) = $test_case;
63
+ assert_eq!( run_length_encoding( raw_str) , encoded) ;
64
+ assert_eq!( run_length_decoding( encoded) , raw_str) ;
65
+ }
66
+ ) *
67
+ } ;
106
68
}
107
69
108
- #[ test]
109
- fn decode_long_character ( ) {
110
- assert_eq ! (
111
- run_length_decoding( "200a3b5c10d" ) ,
112
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbcccccdddddddddd"
113
- )
70
+ test_run_length ! {
71
+ empty_input: ( "" , "" ) ,
72
+ repeated_char: ( "aaaaaaaaaa" , "10a" ) ,
73
+ no_repeated: ( "abcdefghijk" , "1a1b1c1d1e1f1g1h1i1j1k" ) ,
74
+ regular_input: ( "aaaaabbbcccccdddddddddd" , "5a3b5c10d" ) ,
75
+ two_blocks_with_same_char: ( "aaabbaaaa" , "3a2b4a" ) ,
76
+ long_input: ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbcccccdddddddddd" , "200a3b5c10d" ) ,
114
77
}
115
78
}
0 commit comments