diff --git a/main/main.cpp b/main/main.cpp index b315a34..76b03af 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -2,7 +2,6 @@ #include #include #include -#include extern "C" char* strptime(const char* s, @@ -24,336 +23,39 @@ extern "C" char* strptime(const char* s, } #endif +#include "calculate_price.h" + + #include #include -#include - -#include -#include -#include "calculator_functions.h" -#include - - int main() { - std::ifstream input(QDir::homePath().append("/tariff01.json").toStdString()); - std::stringstream sstr; - while(input >> sstr.rdbuf()); - std::string json(sstr.str()); - - Calculator calculator; - Configuration cfg; - - bool isParsed = cfg.ParseJson(&cfg, json.c_str()); - cout << endl; - - char const *startDate = ""; - - if (isParsed) - { - startDate = "2023-05-10T13:52:18.665Z"; - std::string duration = calculator.GetDurationFromCost(&cfg, 3, (char *)startDate, 33, false, true); - cout << "---> startDate " << startDate << " _price_ = " << 33 - << " Total duration is: " << duration << endl; - } - - return 0; - - - - - - - parking_tariff_t *tariff = 0; - if (init_tariff(&tariff, "/etc/psa_tariff/")) { + if (init_tariff(&tariff, "/tmp")) + { struct price_t price; memset(&price, 0x00, sizeof(price)); - QDateTime start = QDateTime::fromString("2023-05-11T07:50:00",Qt::ISODate); //QDateTime::currentDateTime(); + // QDateTime start = QDateTime::fromString("2023-06-01T07:50:00.000Z",Qt::ISODate); //QDateTime::currentDateTime(); + QDateTime start = QDateTime::currentDateTime(); time_t start_parking_time = start.toSecsSinceEpoch() / 60; - time_t end_parking_time = start_parking_time + 615; - if (compute_price_for_parking_ticket(tariff, - start_parking_time, - end_parking_time, - &price)) - { - qDebug() << "GetCostFromDuration() => price=" << price.netto; + // int timeSteps[9] = {60, 180, 1440, 2880, 4320, 5670, 7200, 8640, 10080}; + int timeSteps[3] = {60, 180, 1440}; + + for (int i = 0 ; i < 3; ++i) { + time_t end_parking_time = start_parking_time + timeSteps[i]; + + if (compute_price_for_parking_ticket(tariff, + start_parking_time, + end_parking_time, + &price)) + { + qDebug() << "GetCostFromDuration() time: " << timeSteps[i] << "price=" << price.netto; + } } - QString duration; - if(compute_duration_for_parking_ticket(tariff,start_parking_time,3090,duration)) - { - qDebug() << "GetDurationFromCost() => duration=" << duration; - } - - // Daily ticket - //compute_duration_for_daily_ticket(tariff,start.toString(Qt::ISODate),3); - - //Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over - // // tests - // struct tm now; - // memset(&now, 0, sizeof(now)); - - // // 3.Jan 2023 -> Tuesday - // strptime("2023-01-03T14:00:00", "%Y-%m-%dT%H:%M:%S", &now); - // for (int i = 0; i < 600; ++i) { - // start_parking_time = mktime(&now); - // end_parking_time = start_parking_time + 240; // duration == 240 - - // if (compute_price_for_parking_ticket(tariff, - // start_parking_time, - // end_parking_time, - // &price)) { - // int const zone = get_zone_nr(1); - // switch (zone) { - // case 1: - // assert(price.netto == 879); // expected value: 880 - // break; - // case 2: - // /* fall through */ - // case 3: - // assert(price.netto == 1920); - // break; - // } - // } - // time_t t = start_parking_time + 60; - // now = *localtime(&t); - // } - // // - // // test May 1st 2023 - // // - // memset(&now, 0, sizeof(now)); - // strptime("2023-04-30T06:00:00", "%Y-%m-%dT%H:%M:%S", &now); - // now.tm_hour -= 1; // for ctime - // // for (int i=0; i<6*24; ++i) { - // for (int i=0; i<1; ++i) { - // int const duration = 120; - // time_t t = mktime(&now); - // start_parking_time = t / 60; - // end_parking_time = start_parking_time + duration; - - // if (compute_price_for_parking_ticket(tariff, - // start_parking_time, - // end_parking_time, - // &price)) { - // int const zone = get_zone_nr(); - // switch (zone) { - // case 1: - // qDebug() << i << zone << ctime(&t) << price.netto << " FT"; - // assert(price.netto == 440); - // break; - // case 2: - // /* fall through */ - // case 3: - // qDebug() << i << zone << ctime(&t) << price.netto << " FT"; - // assert(price.netto == 960); - // break; - // } - // } - - // t = (start_parking_time + 60)*60; - // now = *localtime(&t); - // } - free_tariff(tariff); } return 0; - -#if 0 - - //std::string json = "{\"Currency\":[{\"pcu_id\":2,\"pcu_sign\":\"Ft\",\"pcu_major\":\"HUF\",\"pcu_minor\":\"\",\"pcu_active\":true}],\"PaymentMethod\":[{\"pme_id\":1,\"pme_label\":\"progressive\"},{\"pme_id\":2,\"pme_label\":\"degressive\"},{\"pme_id\":3,\"pme_label\":\"linear\"},{\"pme_id\":4,\"pme_label\":\"steps\"}],\"PaymentOption\":[{\"pop_id\":17,\"pop_label\":\"Zone 1\",\"pop_payment_method_id\":3,\"pop_day_end_time\":\"00:00:00\",\"pop_day_night_end_time\":\"00:00:00\",\"pop_price_night\":0,\"pop_min_time\":15,\"pop_max_time\":240,\"pop_min_price\":120,\"pop_carry_over\":1}],\"PaymentRate\":[{\"pra_payment_option_id\":17,\"pra_payment_unit_id\":3,\"pra_price\":480}],\"Duration\":[{\"pun_id\":1,\"pun_label\":\"1h\",\"pun_duration\":60},{\"pun_id\":2,\"pun_label\":\"1 min\",\"pun_duration\":1},{\"pun_id\":3,\"pun_label\":\"15 min\",\"pun_duration\":15},{\"pun_id\":4,\"pun_label\":\"1d\",\"pun_duration\":1440},{\"pun_id\":6,\"pun_label\":\"2h\",\"pun_duration\":120},{\"pun_id\":7,\"pun_label\":\"3h\",\"pun_duration\":180},{\"pun_id\":11,\"pun_label\":\"4h\",\"pun_duration\":240},{\"pun_id\":17,\"pun_label\":\"30 min\",\"pun_duration\":30},{\"pun_id\":18,\"pun_label\":\"1.5h\",\"pun_duration\":90},{\"pun_id\":20,\"pun_label\":\"10min\",\"pun_duration\":10}],\"WeekDaysWorktime\":[{\"pwd_id\":540,\"pwd_period_week_day_id\":32,\"pwd_period_day_in_week_id\":1,\"pwd_time_from\":\"08:00:00\",\"pwd_time_to\":\"18:00:00\"},{\"pwd_id\":541,\"pwd_period_week_day_id\":32,\"pwd_period_day_in_week_id\":2,\"pwd_time_from\":\"08:00:00\",\"pwd_time_to\":\"18:00:00\"},{\"pwd_id\":542,\"pwd_period_week_day_id\":32,\"pwd_period_day_in_week_id\":3,\"pwd_time_from\":\"08:00:00\",\"pwd_time_to\":\"18:00:00\"},{\"pwd_id\":543,\"pwd_period_week_day_id\":32,\"pwd_period_day_in_week_id\":4,\"pwd_time_from\":\"08:00:00\",\"pwd_time_to\":\"18:00:00\"},{\"pwd_id\":544,\"pwd_period_week_day_id\":32,\"pwd_period_day_in_week_id\":5,\"pwd_time_from\":\"08:00:00\",\"pwd_time_to\":\"18:00:00\"}],\"PeriodYear\":[{\"pye_id\":1,\"pye_label\":\"Summer\",\"pye_start_month\":6,\"pye_start_day\":1,\"pye_end_month\":9,\"pye_end_day\":30},{\"pye_id\":2,\"pye_label\":\"Winter\",\"pye_start_month\":10,\"pye_start_day\":1,\"pye_end_month\":5,\"pye_end_day\":31},{\"pye_id\":8,\"pye_label\":\"Whole year\",\"pye_start_month\":1,\"pye_start_day\":1,\"pye_end_month\":12,\"pye_end_day\":31}],\"SpecialDaysWorktime\":[{\"pedwt_id\":2156,\"pedwt_period_exc_day_id\":2024,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2158,\"pedwt_period_exc_day_id\":2025,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2160,\"pedwt_period_exc_day_id\":2026,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2162,\"pedwt_period_exc_day_id\":2027,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2164,\"pedwt_period_exc_day_id\":2028,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2170,\"pedwt_period_exc_day_id\":2030,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2172,\"pedwt_period_exc_day_id\":2032,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2174,\"pedwt_period_exc_day_id\":11,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2175,\"pedwt_period_exc_day_id\":13,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2178,\"pedwt_period_exc_day_id\":2022,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2179,\"pedwt_period_exc_day_id\":14,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2180,\"pedwt_period_exc_day_id\":2017,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2181,\"pedwt_period_exc_day_id\":2018,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2182,\"pedwt_period_exc_day_id\":2019,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2183,\"pedwt_period_exc_day_id\":2020,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2184,\"pedwt_period_exc_day_id\":2021,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2185,\"pedwt_period_exc_day_id\":2023,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2188,\"pedwt_period_exc_day_id\":2031,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2189,\"pedwt_period_exc_day_id\":2029,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2191,\"pedwt_period_exc_day_id\":2016,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2192,\"pedwt_period_exc_day_id\":2033,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2194,\"pedwt_period_exc_day_id\":2034,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2196,\"pedwt_period_exc_day_id\":2035,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2198,\"pedwt_period_exc_day_id\":2036,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2200,\"pedwt_period_exc_day_id\":2037,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2202,\"pedwt_period_exc_day_id\":2038,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2204,\"pedwt_period_exc_day_id\":2039,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2206,\"pedwt_period_exc_day_id\":2040,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2219,\"pedwt_period_exc_day_id\":2041,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2220,\"pedwt_period_exc_day_id\":2042,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2221,\"pedwt_period_exc_day_id\":2043,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2222,\"pedwt_period_exc_day_id\":2044,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2223,\"pedwt_period_exc_day_id\":2045,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"01:00:00\",\"pedwt_price\":0},{\"pedwt_id\":2224,\"pedwt_period_exc_day_id\":2046,\"pedwt_time_from\":\"00:00:00\",\"pedwt_time_to\":\"00:00:00\",\"pedwt_price\":0}],\"SpecialDays\":[{\"ped_id\":11,\"ped_label\":\"Christmas 1st day\",\"ped_date_start\":\"2022-12-25\",\"ped_date_end\":\"2022-12-25\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":13,\"ped_label\":\"Christmas 2nd day\",\"ped_date_start\":\"2022-12-26\",\"ped_date_end\":\"2022-12-26\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":14,\"ped_label\":\"Republic Day (Hungary)\",\"ped_date_start\":\"2022-10-23\",\"ped_date_end\":\"2022-10-23\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2016,\"ped_label\":\"Christmas (Sunday)\",\"ped_date_start\":\"2022-12-24\",\"ped_date_end\":\"2022-12-24\",\"ped_period_special_day_id\":2,\"ped_year\":2023},{\"ped_id\":2017,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2022-12-27\",\"ped_date_end\":\"2022-12-27\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2018,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2022-12-28\",\"ped_date_end\":\"2022-12-28\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2019,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2022-12-29\",\"ped_date_end\":\"2022-12-29\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2020,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2022-12-30\",\"ped_date_end\":\"2022-12-30\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2021,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2022-12-31\",\"ped_date_end\":\"2022-12-31\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2022,\"ped_label\":\"NewYear\",\"ped_date_start\":\"2023-01-01\",\"ped_date_end\":\"2023-01-01\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2023,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2023-01-02\",\"ped_date_end\":\"2023-01-02\",\"ped_period_special_day_id\":1,\"ped_year\":2024},{\"ped_id\":2024,\"ped_label\":\"Good Friday\",\"ped_date_start\":\"2023-04-07\",\"ped_date_end\":\"2023-04-07\",\"ped_period_special_day_id\":2,\"ped_year\":2023},{\"ped_id\":2025,\"ped_label\":\"Easter Sunday\",\"ped_date_start\":\"2023-04-09\",\"ped_date_end\":\"2023-04-09\",\"ped_period_special_day_id\":2,\"ped_year\":2023},{\"ped_id\":2026,\"ped_label\":\"Easter Monday\",\"ped_date_start\":\"2023-04-10\",\"ped_date_end\":\"2023-04-10\",\"ped_period_special_day_id\":2,\"ped_year\":2023},{\"ped_id\":2027,\"ped_label\":\"Whit Sunday\",\"ped_date_start\":\"2023-05-28\",\"ped_date_end\":\"2023-05-28\",\"ped_period_special_day_id\":2,\"ped_year\":2023},{\"ped_id\":2028,\"ped_label\":\"Whit Monday\",\"ped_date_start\":\"2023-05-29\",\"ped_date_end\":\"2023-05-29\",\"ped_period_special_day_id\":2,\"ped_year\":2023},{\"ped_id\":2029,\"ped_label\":\"Revolution Day (Hungary)\",\"ped_date_start\":\"2023-03-15\",\"ped_date_end\":\"2023-03-15\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2030,\"ped_label\":\"Labour Day\",\"ped_date_start\":\"2023-05-01\",\"ped_date_end\":\"2023-05-01\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2031,\"ped_label\":\"Saint Stephens Day (Hungary)\",\"ped_date_start\":\"2023-08-20\",\"ped_date_end\":\"2023-08-20\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2032,\"ped_label\":\"All Saints Day\",\"ped_date_start\":\"2023-11-01\",\"ped_date_end\":\"2023-11-01\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2033,\"ped_label\":\"Christmas (Tuesday)\",\"ped_date_start\":\"2024-12-24\",\"ped_date_end\":\"2024-12-24\",\"ped_period_special_day_id\":2,\"ped_year\":2024},{\"ped_id\":2034,\"ped_label\":\"Good Friday\",\"ped_date_start\":\"2024-03-29\",\"ped_date_end\":\"2024-03-29\",\"ped_period_special_day_id\":2,\"ped_year\":2024},{\"ped_id\":2035,\"ped_label\":\"Easter\",\"ped_date_start\":\"2024-03-31\",\"ped_date_end\":\"2024-03-31\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2036,\"ped_label\":\"Easter Monday\",\"ped_date_start\":\"2024-04-01\",\"ped_date_end\":\"2024-04-01\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2037,\"ped_label\":\"Whit Monday\",\"ped_date_start\":\"2024-05-20\",\"ped_date_end\":\"2024-05-20\",\"ped_period_special_day_id\":2,\"ped_year\":2024},{\"ped_id\":2038,\"ped_label\":\"Whit Sunday\",\"ped_date_start\":\"2024-05-19\",\"ped_date_end\":\"2024-05-19\",\"ped_period_special_day_id\":2,\"ped_year\":2024},{\"ped_id\":2039,\"ped_label\":\"Christmas 1st Day\",\"ped_date_start\":\"2024-12-25\",\"ped_date_end\":\"2024-12-25\",\"ped_period_special_day_id\":2,\"ped_year\":2024},{\"ped_id\":2040,\"ped_label\":\"Christmas 2nd Day\",\"ped_date_start\":\"2024-12-26\",\"ped_date_end\":\"2024-12-26\",\"ped_period_special_day_id\":2,\"ped_year\":0},{\"ped_id\":2041,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2024-12-27\",\"ped_date_end\":\"2024-12-27\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2042,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2024-12-28\",\"ped_date_end\":\"2024-12-28\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2043,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2024-12-29\",\"ped_date_end\":\"2024-12-29\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2044,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2024-12-30\",\"ped_date_end\":\"2024-12-30\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2045,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2024-12-31\",\"ped_date_end\":\"2024-12-31\",\"ped_period_special_day_id\":1,\"ped_year\":0},{\"ped_id\":2046,\"ped_label\":\"Holiday (Hungary)\",\"ped_date_start\":\"2025-01-02\",\"ped_date_end\":\"2025-01-02\",\"ped_period_special_day_id\":1,\"ped_year\":2025}]}"; - - for (int zone = 3; zone < 4; ++zone) { - // std::string fname("/opt/ptu5/opt/customer_281/szeged/tariff/szeged_winter_sale_zone"); - std::string fname("/opt/ptu5/opt/ATB-CalculatorLinux_21.12.2022/tariff/szeged_winter_sale_zone"); - - fname += std::to_string(zone) + ".json"; - - std::cout << fname << std::endl; - - std::ifstream input(fname); - std::stringstream sstr; - while(input >> sstr.rdbuf()); - std::string json(sstr.str()); - - Calculator calculator; - Configuration cfg; - - bool isParsed = cfg.ParseJson(&cfg, json.c_str()); - cout << endl; - - char const *startDate = ""; - - if (isParsed) - { - struct tm now; // = Utilities::DateTimeToStructTm("2023-03-01T16:00:00"); - memset(&now, 0, sizeof(now)); - char buffer[64]; - //#if 0 - // 3.Jan 2023 -> Tuesday - strptime("2023-01-03T14:00:00", "%Y-%m-%dT%H:%M:%S", &now); - for (int i = 0; i < 600; ++i) { - - time_t now_t = mktime(&now); - now_t += 60; - now = *localtime(&now_t); - - sprintf(buffer, "%04d-%02d-%02dT%02d:%02d:%02d", now.tm_year + 1900, now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); - double cost = calculator.GetCostFromDuration(&cfg, PaymentOption::Option1, buffer, 240, false, true); - memset(buffer, 0, 64); - - // cout << "======================================================" << endl; - // cout << "zone " << zone << " ===> " << i << " " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - switch (zone) { - case 1: - assert(cost == 879); // expected value: 880 - break; - case 2: - /* fall through */ - case 3: - assert(cost == 1920); - break; - } - // cout << "======================================================" << endl; - } - - // zone 3 has problems - for (int i = 112; i <= 128; ++i) - { - startDate = "2022-12-23T17:00:00"; - std::string validity = calculator.GetDurationFromCost(&cfg, PaymentOption::Option1, (char *)startDate, i, false, true); - cout << "zone " << zone << ", startDate " << startDate << " _price_ " - << i << " Total duration is: " << validity << endl; - } - - for (int i = 112; i <= 128; ++i) - { - startDate = "2022-12-09T18:00:00"; - std::string validity = calculator.GetDurationFromCost(&cfg, PaymentOption::Option1, (char *)startDate, i, false, true); - cout << "zone " << zone << ", startDate " << startDate << " _price_ " - << i << " Total duration is: " << validity << endl; - } - - for (int i = 112; i <= 128; ++i) { - startDate = "2022-12-26T17:00:00"; - std::string validity = calculator.GetDurationFromCost(&cfg, PaymentOption::Option1, (char *)startDate, i, false, true); - cout << "zone " << zone << ", startDate " << startDate << " _price_ " - << i << " Total duration is: " << validity << endl; - } - - //std::string validity = calculator.GetDurationFromCost(&cfg, PaymentOption::Option1, (char*)"2022-12-22T05:00:00", 75, false, true); - //cout << "_price_ " << " Total duration is: " << validity << " min" << endl; - - startDate = "2022-12-22T05:00:00"; - std::string validity = calculator.GetDurationFromCost(&cfg, PaymentOption::Option1, (char*)startDate, 120, false, true); - cout << "zone " << zone << ", startDate " << startDate << " _price_ " - << " Total duration is: " << validity << " min" << endl; - // working for all zones - // - // test Easter 2023 - // - memset(&now, 0, sizeof(now)); - strptime("2023-04-07T06:00:00", "%Y-%m-%dT%H:%M:%S", &now); - for (int i=0; i<6*24; ++i) { - time_t now_t = mktime(&now); - now_t += 60*60; - now = *localtime(&now_t); - - sprintf(buffer, "%04d-%02d-%02dT%02d:%02d:%02d", now.tm_year + 1900, - now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); - - int const duration = 120; - double cost = calculator.GetCostFromDuration(&cfg, - PaymentOption::Option1, buffer, duration, - false, true); - - switch (zone) { - case 1: - cout << "===> [" << i << "] " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - assert(cost == 440); - break; - case 2: - /* fall through */ - case 3: - assert(cost == 960); - cout << "===> [" << i << "] " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - break; - } - - //if (cost == 960) { - // cout << "===> [" << i << "] " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - //} else { - // cout << "ERROR ===> [" << i << "] " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - // assert(cost == 960); - //} - } - // working for all zones - // - // test May 1st 2023 - // - memset(&now, 0, sizeof(now)); - strptime("2023-04-30T06:00:00", "%Y-%m-%dT%H:%M:%S", &now); - for (int i=0; i<6*24; ++i) { - time_t now_t = mktime(&now); - now_t += 60*60; - now = *localtime(&now_t); - - sprintf(buffer, "%04d-%02d-%02dT%02d:%02d:%02d", now.tm_year + 1900, - now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); - - int const duration = 120; - double cost = calculator.GetCostFromDuration(&cfg, - PaymentOption::Option1, buffer, duration, - false, true); - - switch (zone) { - case 1: - cout << "===> [" << i << "] " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - assert(cost == 440); - break; - case 2: - /* fall through */ - case 3: - assert(cost == 960); - cout << "===> [" << i << "] " << asctime(&now) << " - Total cost is: " << cost << " FT" << endl; - break; - } - } - // only zone 1 has some minor problems - // - // test 17/04/2023 - 27/04/2023 - // - memset(&now, 0, sizeof(now)); - strptime("2023-04-17T06:00:00", "%Y-%m-%dT%H:%M:%S", &now); - int duration = 0; - //for (int i=0; i<1440; ++i) { - for (int i=0; i<1440; ++i) { - time_t now_t = mktime(&now); - now_t += 600; // 10 minutes - now = *localtime(&now_t); - - sprintf(buffer, "%04d-%02d-%02dT%02d:%02d:%02d", now.tm_year + 1900, - now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec); - - double const compCost = (duration < 15) ? 0 : duration * ((zone == 1) ? 3.6666 : 8.0); - double cost = calculator.GetCostFromDuration(&cfg, - PaymentOption::Option1, buffer, duration, - false, true); - if (fabs(cost - compCost) > 1.0) { // zone 1 has rounding errors - cout << "ERROR ===> [" << i << "] " << asctime(&now) - << " - Total cost is: " << cost << " FT (computed=" - << compCost << ")" << endl; - // assert (cost == compCost); - } - - if (++duration > 240) { - duration = 0; - } - } - } - } -#endif - return 0; }