#include #include template std::string joinArrayWithBrackets(const std::array& arr, const std::string& separator = " ") { std::ostringstream result; for (size_t i = 0; i < N; ++i) { if (i > 0) { result << separator; } result << '[' << arr[i] << ']'; } return result.str(); } void setUp(void) { // set stuff up here } void tearDown(void) { // clean stuff up here } void test_CorrectSatsPerDollarConversion(void) { std::array output = parseSatsPerCurrency(37253, CURRENCY_USD, false); TEST_ASSERT_EQUAL_STRING("MSCW/TIME", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("2", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("6", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("8", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("4", output[NUM_SCREENS - 1].c_str()); } void test_SatsPerDollarAfter1B(void) { std::array output = parseSatsPerCurrency(120000000, CURRENCY_USD, false); TEST_ASSERT_EQUAL_STRING("SATS/USD", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING(".", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("8", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("3", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("3", output[NUM_SCREENS - 1].c_str()); } void test_CorrectSatsPerPoundConversion(void) { std::array output = parseSatsPerCurrency(37253, CURRENCY_GBP, false); TEST_ASSERT_EQUAL_STRING("SATS/GBP", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("2", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("6", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("8", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("4", output[NUM_SCREENS - 1].c_str()); } void test_SixCharacterBlockHeight(void) { std::array output = parseBlockHeight(999999); TEST_ASSERT_EQUAL_STRING("BLOCK/HEIGHT", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("9", output[1].c_str()); } void test_SevenCharacterBlockHeight(void) { std::array output = parseBlockHeight(1000000); TEST_ASSERT_EQUAL_STRING("1", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[1].c_str()); } void test_FeeRateDisplay(void) { uint testValue = 21; std::array output = parseBlockFees(static_cast(testValue)); TEST_ASSERT_EQUAL_STRING("FEE/RATE", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("2", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("1", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("sat/vB", output[NUM_SCREENS - 1].c_str()); } void test_PriceOf100kusd(void) { std::array output = parsePriceData(100000, '$'); TEST_ASSERT_EQUAL_STRING("$", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("1", output[1].c_str()); } void test_PriceOf1MillionUsd(void) { std::array output = parsePriceData(1000000, '$'); TEST_ASSERT_EQUAL_STRING("BTC/USD", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("1", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING(".", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("M", output[NUM_SCREENS - 1].c_str()); } void test_PriceSuffixMode(void) { std::array output = parsePriceData(93000, '$', true, false); TEST_ASSERT_EQUAL_STRING("BTC/USD", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("9", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING("3", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING(".", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("K", output[NUM_SCREENS - 1].c_str()); } void test_PriceSuffixModeCompact1(void) { std::array output = parsePriceData(100000, '$', true, false, true); std::string joined = joinArrayWithBrackets(output); TEST_ASSERT_EQUAL_STRING_MESSAGE("BTC/USD", output[0].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("$", output[NUM_SCREENS - 6].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("1", output[NUM_SCREENS - 5].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 4].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0.", output[NUM_SCREENS - 3].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 2].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("K", output[NUM_SCREENS - 1].c_str(), joined.c_str()); } void test_PriceSuffixModeCompact2(void) { std::array output = parsePriceData(1000000, '$', true, false, true); std::string joined = joinArrayWithBrackets(output); TEST_ASSERT_EQUAL_STRING_MESSAGE("BTC/USD", output[0].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("$", output[NUM_SCREENS - 6].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("1.", output[NUM_SCREENS - 5].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 4].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 3].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 2].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("M", output[NUM_SCREENS - 1].c_str(), joined.c_str()); } void test_PriceSuffixModeMow(void) { std::array output = parsePriceData(93600, '$', true, true); std::string joined = joinArrayWithBrackets(output); TEST_ASSERT_EQUAL_STRING_MESSAGE("$", output[0].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE(".", output[NUM_SCREENS - 5].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 4].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("9", output[NUM_SCREENS - 3].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("3", output[NUM_SCREENS - 2].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("M", output[NUM_SCREENS - 1].c_str(), joined.c_str()); } void test_PriceSuffixModeMowCompact(void) { std::array output = parsePriceData(93600, '$', true, true, true); std::string joined = joinArrayWithBrackets(output); TEST_ASSERT_EQUAL_STRING_MESSAGE("MOW/UNITS", output[0].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("$", output[NUM_SCREENS - 6].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0.", output[NUM_SCREENS - 5].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("0", output[NUM_SCREENS - 4].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("9", output[NUM_SCREENS - 3].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("3", output[NUM_SCREENS - 2].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("M", output[NUM_SCREENS - 1].c_str(), joined.c_str()); } void test_McapLowerUsd(void) { std::array output = parseMarketCap(810000, 26000, '$', true); TEST_ASSERT_EQUAL_STRING("USD/MCAP", output[0].c_str()); // TEST_ASSERT_EQUAL_STRING("$", output[NUM_SCREENS-6].c_str()); TEST_ASSERT_EQUAL_STRING("$", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING("5", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("7", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("B", output[NUM_SCREENS - 1].c_str()); } void test_Mcap1TrillionUsd(void) { std::array output = parseMarketCap(831000, 52000, '$', true); TEST_ASSERT_EQUAL_STRING("USD/MCAP", output[0].c_str()); TEST_ASSERT_EQUAL_STRING("$", output[NUM_SCREENS - 6].c_str()); TEST_ASSERT_EQUAL_STRING("1", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING(".", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("2", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("T", output[NUM_SCREENS - 1].c_str()); } void test_Mcap1TrillionUsdSmallChars(void) { std::array output = parseMarketCap(831000, 52000, '$', false); TEST_ASSERT_EQUAL_STRING("USD/MCAP", output[0].c_str()); std::string joined = joinArrayWithBrackets(output); TEST_ASSERT_EQUAL_STRING_MESSAGE(" $ ", output[NUM_SCREENS - 6].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE(" 1", output[NUM_SCREENS - 5].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("020", output[NUM_SCREENS - 4].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("825", output[NUM_SCREENS - 3].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("000", output[NUM_SCREENS - 2].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("000", output[NUM_SCREENS - 1].c_str(), joined.c_str()); } void test_Mcap1TrillionEur(void) { std::array output = parseMarketCap(831000, 52000, CURRENCY_EUR, true); TEST_ASSERT_EQUAL_STRING("EUR/MCAP", output[0].c_str()); TEST_ASSERT_TRUE(CURRENCY_EUR == output[NUM_SCREENS - 6].c_str()[0]); TEST_ASSERT_EQUAL_STRING("1", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING(".", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("2", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("T", output[NUM_SCREENS - 1].c_str()); } void test_Mcap1TrillionEurSmallChars(void) { std::array output = parseMarketCap(831000, 52000, CURRENCY_EUR, false); TEST_ASSERT_EQUAL_STRING("EUR/MCAP", output[0].c_str()); std::string joined = joinArrayWithBrackets(output); char result[4]; snprintf(result, sizeof(result), " %c ", CURRENCY_EUR); TEST_ASSERT_EQUAL_STRING(result, output[NUM_SCREENS - 6].c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE(" 1", output[NUM_SCREENS - 5].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("020", output[NUM_SCREENS - 4].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("825", output[NUM_SCREENS - 3].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("000", output[NUM_SCREENS - 2].c_str(), joined.c_str()); TEST_ASSERT_EQUAL_STRING_MESSAGE("000", output[NUM_SCREENS - 1].c_str(), joined.c_str()); } void test_Mcap1TrillionJpy(void) { std::array output = parseMarketCap(831000, 52000, CURRENCY_JPY, true); TEST_ASSERT_EQUAL_STRING("JPY/MCAP", output[0].c_str()); TEST_ASSERT_TRUE(CURRENCY_JPY == output[NUM_SCREENS - 6].c_str()[0]); TEST_ASSERT_EQUAL_STRING("1", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING(".", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("0", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("2", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("T", output[NUM_SCREENS - 1].c_str()); } void test_Mcap1TrillionJpySmallChars(void) { std::array output = parseMarketCap(831000, 52000, CURRENCY_JPY, false); TEST_ASSERT_EQUAL_STRING("JPY/MCAP", output[0].c_str()); char result[4]; snprintf(result, sizeof(result), " %c ", CURRENCY_JPY); TEST_ASSERT_EQUAL_STRING(result, output[NUM_SCREENS - 6].c_str()); TEST_ASSERT_EQUAL_STRING(" 1", output[NUM_SCREENS - 5].c_str()); TEST_ASSERT_EQUAL_STRING("020", output[NUM_SCREENS - 4].c_str()); TEST_ASSERT_EQUAL_STRING("825", output[NUM_SCREENS - 3].c_str()); TEST_ASSERT_EQUAL_STRING("000", output[NUM_SCREENS - 2].c_str()); TEST_ASSERT_EQUAL_STRING("000", output[NUM_SCREENS - 1].c_str()); } // not needed when using generate_test_runner.rb int runUnityTests(void) { UNITY_BEGIN(); RUN_TEST(test_CorrectSatsPerDollarConversion); RUN_TEST(test_CorrectSatsPerPoundConversion); RUN_TEST(test_SatsPerDollarAfter1B); RUN_TEST(test_SixCharacterBlockHeight); RUN_TEST(test_SevenCharacterBlockHeight); RUN_TEST(test_FeeRateDisplay); RUN_TEST(test_PriceOf100kusd); RUN_TEST(test_McapLowerUsd); RUN_TEST(test_Mcap1TrillionUsd); RUN_TEST(test_Mcap1TrillionUsdSmallChars); RUN_TEST(test_Mcap1TrillionEur); RUN_TEST(test_Mcap1TrillionEurSmallChars); RUN_TEST(test_Mcap1TrillionJpy); RUN_TEST(test_Mcap1TrillionJpySmallChars); RUN_TEST(test_PriceSuffixMode); RUN_TEST(test_PriceSuffixModeCompact1); RUN_TEST(test_PriceSuffixModeCompact2); RUN_TEST(test_PriceSuffixModeMow); RUN_TEST(test_PriceSuffixModeMowCompact); return UNITY_END(); } int main(void) { return runUnityTests(); } extern "C" void app_main() { runUnityTests(); }