diff --git a/src/calc.cpp b/src/calc.cpp index a5aa766ca3798c786b1541274f8dade45bf4bb62..e9afa07dab7fc990f17c552384ca6feb6a95f938 100644 --- a/src/calc.cpp +++ b/src/calc.cpp @@ -2,11 +2,13 @@ #include <stack> #include <stdexcept> +#include <cmath> int plus( int a, int b) { return a + b; } int minus( int a, int b) { return a - b; } int multiply(int a, int b) { return a * b; } int divide( int a, int b) { return a / b; } +int power( int a, int b) { return std::pow(a, b); } int modulo( int a, int b) { return a % b; } int pop_stack(auto &stack) { @@ -30,6 +32,7 @@ int evaluate(const std::string &s) { case '-': change_stack_state(minus, stack); break; case '*': change_stack_state(multiply, stack); break; case '/': change_stack_state(divide, stack); break; + case '^': change_stack_state(power, stack); break; case '%': change_stack_state(modulo, stack); break; case '0'...'9': stack.push(c - '0'); break; default: diff --git a/test/test.cpp b/test/test.cpp index 0594786e7a7af91d43508cf1b7c13dc4512b689c..7d2d9ddc7e8d6a19f97c7bf01b90ffcdaa3b85eb 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -7,6 +7,12 @@ TEST_CASE( "some example calculations", "[calc]") { REQUIRE( evaluate("12+2-3*") == 3 ); } +TEST_CASE( "pow function works", "[calc]") { + REQUIRE( evaluate("22^") == 4 ); + REQUIRE( evaluate("43^") == 64 ); + REQUIRE( evaluate("11^") == 1); +} + TEST_CASE( "basic addition", "[calc]"){ REQUIRE( evaluate("55+") == 10); REQUIRE( evaluate("34+") == 7);