@@ -97,3 +97,57 @@ fn checked_log10() {
97
97
assert_eq ! ( i. checked_log10( ) , Some ( ( i as f32 ) . log10( ) as u16 ) ) ;
98
98
}
99
99
}
100
+
101
+ macro_rules! log10_loop {
102
+ ( $T: ty, $log10_max: expr) => {
103
+ assert_eq!( <$T>:: MAX . log10( ) , $log10_max) ;
104
+ for i in 0 ..=$log10_max {
105
+ let p = ( 10 as $T) . pow( i as u32 ) ;
106
+ if p >= 10 {
107
+ assert_eq!( ( p - 9 ) . log10( ) , i - 1 ) ;
108
+ assert_eq!( ( p - 1 ) . log10( ) , i - 1 ) ;
109
+ }
110
+ assert_eq!( p. log10( ) , i) ;
111
+ assert_eq!( ( p + 1 ) . log10( ) , i) ;
112
+ if p >= 10 {
113
+ assert_eq!( ( p + 9 ) . log10( ) , i) ;
114
+ }
115
+
116
+ // also check `x.log(10)`
117
+ if p >= 10 {
118
+ assert_eq!( ( p - 9 ) . log( 10 ) , i - 1 ) ;
119
+ assert_eq!( ( p - 1 ) . log( 10 ) , i - 1 ) ;
120
+ }
121
+ assert_eq!( p. log( 10 ) , i) ;
122
+ assert_eq!( ( p + 1 ) . log( 10 ) , i) ;
123
+ if p >= 10 {
124
+ assert_eq!( ( p + 9 ) . log( 10 ) , i) ;
125
+ }
126
+ }
127
+ } ;
128
+ }
129
+
130
+ #[ test]
131
+ fn log10_u8 ( ) {
132
+ log10_loop ! { u8 , 2 }
133
+ }
134
+
135
+ #[ test]
136
+ fn log10_u16 ( ) {
137
+ log10_loop ! { u16 , 4 }
138
+ }
139
+
140
+ #[ test]
141
+ fn log10_u32 ( ) {
142
+ log10_loop ! { u32 , 9 }
143
+ }
144
+
145
+ #[ test]
146
+ fn log10_u64 ( ) {
147
+ log10_loop ! { u64 , 19 }
148
+ }
149
+
150
+ #[ test]
151
+ fn log10_u128 ( ) {
152
+ log10_loop ! { u128 , 38 }
153
+ }
0 commit comments