Something went wrong. Try again.
A simple, small calculator placed discreetly near the Windows Taskbar or anywhere on the screen taskbar-calculator.marcomaroni.it
Something went wrong. Try again.
3.2 kB · 145 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146#include <windows.h>#include <tchar.h>#include "../Calculator.h"#include "TestHarness.h"
// Feed a sequence of command chars through the engine, threading the// output string back in as the next input (as the UI does).static void feed(calc& c, const wchar_t* keys, wchar_t* out) { wcscpy(out, L"0"); wchar_t in[1024]; for (const wchar_t* p = keys; *p; ++p) { wcscpy(in, out); c.change_state(*p, in, out); }}
TEST(add) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"2+3=", out); EXPECT_WSTR(out, L"5"); return true;}
TEST(subtract) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"7-2=", out); EXPECT_WSTR(out, L"5"); return true;}
TEST(multiply) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"6*7=", out); EXPECT_WSTR(out, L"42"); return true;}
TEST(divide) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"8/2=", out); EXPECT_WSTR(out, L"4"); return true;}
TEST(decimal_and_add) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"1.5+1.5=", out); EXPECT_WSTR(out, L"3"); return true;}
TEST(chained_operations) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"2+3+4=", out); EXPECT_WSTR(out, L"9"); return true;}
TEST(square_root) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"9Q", out); // Q = CALC_SQRT EXPECT_WSTR(out, L"3"); return true;}
TEST(reciprocal) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"4I", out); // I = CALC_I (inverse, 1/x) EXPECT_WSTR(out, L"0.25"); return true;}
TEST(percent) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"200*10%", out); // % = CALC_PERC EXPECT_WSTR(out, L"20"); return true;}
TEST(negate) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"5P", out); // P = CALC_NEG EXPECT_WSTR(out, L"-5"); return true;}
TEST(triple_zero) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"5Z", out); // Z = CALC_000 EXPECT_WSTR(out, L"5000"); return true;}
TEST(reset) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"123N", out); // N = CALC_RESET EXPECT_WSTR(out, L"0"); return true;}
TEST(divide_by_zero) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"5/0=", out); EXPECT_WSTR(out, L"Error: division by zero"); return true;}
TEST(overflow) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"99999999999999999999999999", out); // 26 digits > MAX_LEN_RESULT (25) EXPECT_WSTR(out, L"Error: overflow"); return true;}
TEST(euro_key_is_noop) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"5R", out); // R = CALC_EURO (removed) -> must not convert EXPECT_WSTR(out, L"5"); return true;}
TEST(hex_toggle_key_is_noop) { calc c; c.set_precision(2); wchar_t out[1024]; feed(c, L"255X", out); // X = CALC_X (removed) -> stays decimal text EXPECT_WSTR(out, L"255"); return true;}
int wmain() { return run_all(); }