mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
test: Add self-test cases in the math/power_of_two.cpp
file (#1640)
* Added self implement cases power_of_two.cpp added assert & a clean code. * added self implementation cases * added desciption * update Co-authored-by: David Leal <halfpacho@gmail.com> Co-authored-by: Abhinn Mishra <49574460+mishraabhinn@users.noreply.github.com>
This commit is contained in:
parent
d03a7068d0
commit
27ced495bf
@ -19,9 +19,12 @@
|
||||
* approach.
|
||||
*
|
||||
* @author [Neha Hasija](https://github.com/neha-hasija17)
|
||||
* @author [Rijul.S](https://github.com/Rijul24)
|
||||
*/
|
||||
|
||||
#include <iostream> /// for std::cout
|
||||
#include <iostream> /// for IO operations
|
||||
#include <cassert> /// for assert
|
||||
|
||||
|
||||
/**
|
||||
* @namespace math
|
||||
@ -29,38 +32,75 @@
|
||||
*/
|
||||
namespace math {
|
||||
/**
|
||||
* @brief Function to test above algorithm
|
||||
* @param n description
|
||||
* @returns void
|
||||
* @brief This function finds whether a number is power of 2 or not
|
||||
* @param n value for which we want to check
|
||||
* prints the result, as "Yes, the number n is a power of 2" or
|
||||
* "No, the number is not a power of 2" without quotes
|
||||
* @returns 1 if `n` IS the power of 2
|
||||
* @returns 0 if n is NOT a power of 2
|
||||
*/
|
||||
void power_of_two(int n) {
|
||||
/**
|
||||
* This function finds whether a number is power of 2 or not
|
||||
* @param n value for which we want to check
|
||||
* prints the result, as "Yes, the number n is a power of 2" or
|
||||
* "No, the number is not a power of 2" without quotes
|
||||
*/
|
||||
int power_of_two(int n) {
|
||||
/// result stores the
|
||||
/// bitwise and of n and n-1
|
||||
int result = n & (n - 1);
|
||||
|
||||
if (result == 0) {
|
||||
std::cout << "Yes, the number " << n << " is a power of 2";
|
||||
return 1;
|
||||
} else {
|
||||
std::cout << "No, the number " << n << " is not a power of 2";
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} // namespace math
|
||||
|
||||
/**
|
||||
* @brief Self-test implementations
|
||||
* @returns void
|
||||
*/
|
||||
static void test() {
|
||||
std::cout << "First case testing... \n"; // for n = 32 return 1
|
||||
assert(math::power_of_two(32) == 1);
|
||||
std::cout << "\nPassed!\n";
|
||||
|
||||
std::cout << "Second case testing... \n"; // for n = 5 return 0
|
||||
assert(math::power_of_two(5) == 0);
|
||||
std::cout << "\nPassed!\n";
|
||||
|
||||
std::cout << "Third case testing... \n"; // for n = 232 return 0
|
||||
assert(math::power_of_two(232) == 0);
|
||||
std::cout << "\nPassed!\n";
|
||||
|
||||
std::cout << "\nAll test cases have successfully passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Take user input in the test cases (optional; currently commented)
|
||||
* @returns void
|
||||
*/
|
||||
void user_input_test() {
|
||||
int n = 0; // input from user
|
||||
|
||||
std::cout << "Enter a number " << std::endl;
|
||||
std::cin >> n;
|
||||
|
||||
/// function call with @param n
|
||||
int result = math::power_of_two(n);
|
||||
if (result == 1) {
|
||||
std::cout << "Yes, the number " << n << " is a power of 2\n";
|
||||
}
|
||||
else {
|
||||
std::cout << "No, the number " << n << " is not a power of 2\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Main function
|
||||
* @returns 0 on exit
|
||||
*/
|
||||
int main() {
|
||||
int n = 0;
|
||||
/// n stores the input from the user
|
||||
std::cout << "enter a number " << std::endl;
|
||||
std::cin >> n;
|
||||
/// function call with @param n
|
||||
math::power_of_two(n);
|
||||
test(); // run self-test implementations
|
||||
|
||||
// uncomment the line below to take user inputs
|
||||
//user_input_test();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user