1
1
use renet:: Bytes ;
2
2
3
+ #[ derive( Debug , PartialEq ) ]
3
4
pub struct RLEToken {
4
5
symbol : i32 ,
5
6
count : i32 ,
@@ -47,6 +48,18 @@ fn tokenize_buffer(array: Vec<i32>) -> Vec<RLEToken> {
47
48
vec
48
49
}
49
50
51
+ fn revert_buffer_tokenization ( tokens : Vec < RLEToken > ) -> Vec < i32 > {
52
+ let mut vec = Vec :: < i32 > :: new ( ) ;
53
+
54
+ tokens. iter ( ) . for_each ( |token| {
55
+ for _ in 0 ..token. count {
56
+ vec. push ( token. symbol ) ;
57
+ }
58
+ } ) ;
59
+
60
+ vec
61
+ }
62
+
50
63
#[ cfg( test) ]
51
64
pub mod tests {
52
65
use super :: * ;
@@ -56,12 +69,26 @@ pub mod tests {
56
69
let array = vec ! [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 ] ;
57
70
let tokens = tokenize_buffer ( array) ;
58
71
59
- assert_eq ! ( tokens. len( ) , 3 ) ;
60
- assert_eq ! ( tokens[ 0 ] . symbol, 1 ) ;
61
- assert_eq ! ( tokens[ 0 ] . count, 4 ) ;
62
- assert_eq ! ( tokens[ 1 ] . symbol, 2 ) ;
63
- assert_eq ! ( tokens[ 1 ] . count, 3 ) ;
64
- assert_eq ! ( tokens[ 2 ] . symbol, 3 ) ;
65
- assert_eq ! ( tokens[ 2 ] . count, 5 ) ;
72
+ let expected_tokens = vec ! [
73
+ RLEToken { symbol: 1 , count: 4 } ,
74
+ RLEToken { symbol: 2 , count: 3 } ,
75
+ RLEToken { symbol: 3 , count: 5 } ,
76
+ ] ;
77
+
78
+ assert_eq ! ( tokens, expected_tokens) ;
79
+ }
80
+
81
+ #[ test]
82
+ fn test_revert_buffer_tokenization ( ) {
83
+ let tokens = vec ! [
84
+ RLEToken { symbol: 1 , count: 4 } ,
85
+ RLEToken { symbol: 2 , count: 3 } ,
86
+ RLEToken { symbol: 3 , count: 5 } ,
87
+ ] ;
88
+
89
+ let array = revert_buffer_tokenization ( tokens) ;
90
+ let expected_array = vec ! [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 ] ;
91
+
92
+ assert_eq ! ( array, expected_array) ;
66
93
}
67
94
}
0 commit comments