| 1 | // Translated from C to Rust. The original C code can be found at |
| 2 | // https://github.com/ulfjack/ryu and carries the following license: |
| 3 | // |
| 4 | // Copyright 2018 Ulf Adams |
| 5 | // |
| 6 | // The contents of this file may be used under the terms of the Apache License, |
| 7 | // Version 2.0. |
| 8 | // |
| 9 | // (See accompanying file LICENSE-Apache or copy at |
| 10 | // http://www.apache.org/licenses/LICENSE-2.0) |
| 11 | // |
| 12 | // Alternatively, the contents of this file may be used under the terms of |
| 13 | // the Boost Software License, Version 1.0. |
| 14 | // (See accompanying file LICENSE-Boost or copy at |
| 15 | // https://www.boost.org/LICENSE_1_0.txt) |
| 16 | // |
| 17 | // Unless required by applicable law or agreed to in writing, this software |
| 18 | // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| 19 | // KIND, either express or implied. |
| 20 | |
| 21 | #![allow (dead_code)] |
| 22 | #![allow ( |
| 23 | clippy::cast_lossless, |
| 24 | clippy::cast_possible_truncation, |
| 25 | clippy::unreadable_literal |
| 26 | )] |
| 27 | |
| 28 | #[path = "../src/d2s_intrinsics.rs" ] |
| 29 | mod d2s_intrinsics; |
| 30 | |
| 31 | use d2s_intrinsics::pow5_factor; |
| 32 | |
| 33 | #[test] |
| 34 | fn test_pow5_factor() { |
| 35 | assert_eq!(0, pow5_factor(1)); |
| 36 | assert_eq!(0, pow5_factor(2)); |
| 37 | assert_eq!(0, pow5_factor(3)); |
| 38 | assert_eq!(0, pow5_factor(4)); |
| 39 | assert_eq!(1, pow5_factor(5)); |
| 40 | assert_eq!(0, pow5_factor(6)); |
| 41 | assert_eq!(0, pow5_factor(7)); |
| 42 | assert_eq!(0, pow5_factor(8)); |
| 43 | assert_eq!(0, pow5_factor(9)); |
| 44 | assert_eq!(1, pow5_factor(10)); |
| 45 | |
| 46 | assert_eq!(0, pow5_factor(12)); |
| 47 | assert_eq!(0, pow5_factor(14)); |
| 48 | assert_eq!(0, pow5_factor(16)); |
| 49 | assert_eq!(0, pow5_factor(18)); |
| 50 | assert_eq!(1, pow5_factor(20)); |
| 51 | |
| 52 | assert_eq!(2, pow5_factor(5 * 5)); |
| 53 | assert_eq!(3, pow5_factor(5 * 5 * 5)); |
| 54 | assert_eq!(4, pow5_factor(5 * 5 * 5 * 5)); |
| 55 | assert_eq!(5, pow5_factor(5 * 5 * 5 * 5 * 5)); |
| 56 | assert_eq!(6, pow5_factor(5 * 5 * 5 * 5 * 5 * 5)); |
| 57 | assert_eq!(7, pow5_factor(5 * 5 * 5 * 5 * 5 * 5 * 5)); |
| 58 | assert_eq!(8, pow5_factor(5 * 5 * 5 * 5 * 5 * 5 * 5 * 5)); |
| 59 | assert_eq!(9, pow5_factor(5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5)); |
| 60 | assert_eq!(10, pow5_factor(5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5)); |
| 61 | |
| 62 | assert_eq!(0, pow5_factor(42)); |
| 63 | assert_eq!(1, pow5_factor(42 * 5)); |
| 64 | assert_eq!(2, pow5_factor(42 * 5 * 5)); |
| 65 | assert_eq!(3, pow5_factor(42 * 5 * 5 * 5)); |
| 66 | assert_eq!(4, pow5_factor(42 * 5 * 5 * 5 * 5)); |
| 67 | assert_eq!(5, pow5_factor(42 * 5 * 5 * 5 * 5 * 5)); |
| 68 | |
| 69 | assert_eq!(27, pow5_factor(7450580596923828125)); // 5^27, largest power of 5 < 2^64. |
| 70 | assert_eq!(1, pow5_factor(18446744073709551615)); // 2^64 - 1, largest multiple of 5 < 2^64. |
| 71 | assert_eq!(0, pow5_factor(18446744073709551614)); // 2^64 - 2, largest non-multiple of 5 < 2^64. |
| 72 | } |
| 73 | |