Skip to content

Commit 4fe660e

Browse files
authored
Cleanup perfect_cube.rs (TheAlgorithms#655)
1 parent da08798 commit 4fe660e

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

src/math/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ pub use self::modular_exponential::{mod_inverse, modular_exponential};
134134
pub use self::newton_raphson::find_root;
135135
pub use self::nthprime::nthprime;
136136
pub use self::pascal_triangle::pascal_triangle;
137-
pub use self::perfect_cube::{perfect_cube, perfect_cube_binary_search};
137+
pub use self::perfect_cube::perfect_cube_binary_search;
138138
pub use self::perfect_numbers::perfect_numbers;
139139
pub use self::perfect_square::perfect_square;
140140
pub use self::perfect_square::perfect_square_binary_search;

src/math/perfect_cube.rs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
1-
pub fn perfect_cube(n: i32) -> bool {
2-
// Calculate the cube root using floating-point arithmetic.
3-
let val = (n as f64).powf(1.0 / 3.0);
4-
// Check if the cube of the cube root equals the original number.
5-
(val * val * val) == (n as f64)
6-
}
7-
81
// Check if a number is a perfect cube using binary search.
92
pub fn perfect_cube_binary_search(n: i64) -> bool {
10-
// Handle negative numbers, as cube roots are not defined for negatives.
113
if n < 0 {
12-
return false;
4+
return perfect_cube_binary_search(-n);
135
}
146

157
// Initialize left and right boundaries for binary search.
@@ -39,17 +31,31 @@ pub fn perfect_cube_binary_search(n: i64) -> bool {
3931
mod tests {
4032
use super::*;
4133

42-
#[test]
43-
fn test_perfect_cube() {
44-
assert!(perfect_cube_binary_search(27));
45-
assert!(!perfect_cube_binary_search(4));
34+
macro_rules! test_perfect_cube {
35+
($($name:ident: $inputs:expr,)*) => {
36+
$(
37+
#[test]
38+
fn $name() {
39+
let (n, expected) = $inputs;
40+
assert_eq!(perfect_cube_binary_search(n), expected);
41+
assert_eq!(perfect_cube_binary_search(-n), expected);
42+
}
43+
)*
44+
}
4645
}
4746

48-
#[test]
49-
fn test_perfect_cube_binary_search() {
50-
assert!(perfect_cube_binary_search(27));
51-
assert!(perfect_cube_binary_search(64));
52-
assert!(!perfect_cube_binary_search(4));
53-
assert!(!perfect_cube_binary_search(-8));
47+
test_perfect_cube! {
48+
num_0_a_perfect_cube: (0, true),
49+
num_1_is_a_perfect_cube: (1, true),
50+
num_27_is_a_perfect_cube: (27, true),
51+
num_64_is_a_perfect_cube: (64, true),
52+
num_8_is_a_perfect_cube: (8, true),
53+
num_2_is_not_a_perfect_cube: (2, false),
54+
num_3_is_not_a_perfect_cube: (3, false),
55+
num_4_is_not_a_perfect_cube: (4, false),
56+
num_5_is_not_a_perfect_cube: (5, false),
57+
num_999_is_not_a_perfect_cube: (999, false),
58+
num_1000_is_a_perfect_cube: (1000, true),
59+
num_1001_is_not_a_perfect_cube: (1001, false),
5460
}
5561
}

0 commit comments

Comments
 (0)