Skip to content

Commit 874421e

Browse files
fix format + add comments
1 parent 1402d50 commit 874421e

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

library/core/src/num/dec2flt/decimal_seq.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
//! algorithm can be found in "ParseNumberF64 by Simple Decimal Conversion",
1010
//! available online: <https://nigeltao.github.io/blog/2020/parse-number-f64-simple.html>.
1111
12-
use crate::num::dec2flt::common::{ByteSlice, is_8digits};
1312
use crate::kani;
13+
use crate::num::dec2flt::common::{ByteSlice, is_8digits};
1414

1515
/// A decimal floating-point number, represented as a sequence of decimal digits.
1616
#[derive(Clone, Debug, PartialEq)]
@@ -132,9 +132,9 @@ impl DecimalSeq {
132132
let mut read_index = self.num_digits;
133133
let mut write_index = self.num_digits + num_new_digits;
134134
let mut n = 0_u64;
135-
136-
#[kani::loop_invariant(read_index <= Self::MAX_DIGITS &&
137-
write_index == read_index + num_new_digits &&
135+
136+
#[kani::loop_invariant(read_index <= Self::MAX_DIGITS &&
137+
write_index == read_index + num_new_digits &&
138138
n < 10u64 << (shift - 1) &&
139139
self.num_digits <= Self::MAX_DIGITS &&
140140
self.decimal_point <= self.num_digits as i32 &&
@@ -207,8 +207,8 @@ impl DecimalSeq {
207207
return;
208208
}
209209
let mask = (1_u64 << shift) - 1;
210-
#[kani::loop_invariant(self.num_digits <= Self::MAX_DIGITS &&
211-
write_index < read_index &&
210+
#[kani::loop_invariant(self.num_digits <= Self::MAX_DIGITS &&
211+
write_index < read_index &&
212212
write_index < Self::MAX_DIGITS - self.num_digits.saturating_sub(read_index)
213213
)]
214214
while read_index < self.num_digits {
@@ -408,13 +408,14 @@ pub mod decimal_seq_verify {
408408
num_digits: kani::any(),
409409
decimal_point: kani::any(),
410410
truncated: kani::any(),
411-
digits: kani::any() };
411+
digits: kani::any(),
412+
};
412413
kani::assume(a.num_digits <= DecimalSeq::MAX_DIGITS);
413-
kani::assume(a.decimal_point>=0);
414+
kani::assume(a.decimal_point >= 0);
414415
kani::assume(a.decimal_point <= a.num_digits as i32);
415416
kani::assume(kani::forall!(|i in (0,DecimalSeq::MAX_DIGITS)| a.digits[i] <= 9));
416-
ret
417-
}
417+
ret
418+
}
418419
}
419420

420421
#[kani::proof]
@@ -428,13 +429,16 @@ pub mod decimal_seq_verify {
428429
let mut a: DecimalSeq = kani::any();
429430
let shift: usize = kani::any_where(|x| *x > 0 && *x <= 60);
430431
let n = number_of_digits_decimal_left_shift(&a, shift);
432+
// 19 is the greatest number x such that 10u64^x does not overflow
433+
// It is also TABLE.max << 11
431434
assert!(n <= 19);
432435
assert!(n == 19 || 1u64 << shift < 10u64.pow(n as u32 + 1))
433436
}
434437

435438
#[kani::proof]
436439
fn check_right_shift() {
437440
let mut a: DecimalSeq = kani::any();
441+
//This function is called in parse_long_mantissa function (slow.rs), in which the maximum of shift is 60
438442
let shift: usize = kani::any_where(|x| *x > 0 && *x <= 60);
439443
a.right_shift(shift);
440444
}

0 commit comments

Comments
 (0)