void PricingTest::testBestTime() { // Lowest price of the day Schedule schedule; schedule.duration = 4*3600; // 1h schedule.startTime = Clock::getDayInSeconds() + 9*3600 + 60*30; schedule.interval = 6*3600 + 0*60*50; Pricing pricing; Serial.println(Clock::getHumanDateTime(pricing.getBestTime(schedule))); Serial.println("==========================="); }
bool do_test(vector<int> price, int __expected) { time_t startClock = clock(); Pricing* instance = new Pricing(); int __result = instance->maxSales(price); double elapsed = (double)(clock() - startClock) / CLOCKS_PER_SEC; delete instance; if (__result == __expected) { cout << "PASSED!" << " (" << elapsed << " seconds)" << endl; return true; } else { cout << "FAILED!" << " (" << elapsed << " seconds)" << endl; cout << " Expected: " << to_string(__expected) << endl; cout << " Received: " << to_string(__result) << endl; return false; } }
bool Scheduler::updateSchedules(Pricing& pricing, NodeInfo& nodeInfo) { if (!isMaster()) { Master::schedule(&nodeInfo); return true; } unsigned long now = Clock::getUnixTime(); bool changed = false; for (auto &schedule : nodeInfo.schedules) { // we already have a designated time or interval expired, so we can get next time if (schedule.repeatEvery > 0 && ((schedule.designatedTime > schedule.startTime && schedule.designatedTime < schedule.startTime + schedule.interval) || schedule.startTime + schedule.interval < now)) { schedule.startTime += schedule.repeatEvery * ceil(float(now - schedule.interval - schedule.startTime) / float(schedule.repeatEvery)); changed = true; } #if DEBUG_SCHEDULER Serial.print("lastRun"); Serial.println(schedule.lastRun); Serial.print("designatedtime"); Serial.println(schedule.designatedTime); Serial.print("duration"); Serial.println(schedule.duration); Serial.print("startime"); Serial.println(schedule.startTime); Serial.print("now"); Serial.println(now); Serial.print("startime"); Serial.println(schedule.startTime); Serial.print("startime-now"); Serial.println(long(schedule.startTime - now)); #endif // It has already run or the designated time expiered if ((schedule.lastRun >= schedule.designatedTime || schedule.designatedTime + schedule.duration > now) // and we have a new plan to schedule && schedule.startTime > schedule.designatedTime // and there are only 30 minutes left to ensure we have data for the interval && long(schedule.startTime - now) < 1800) { if (isMaster()) schedule.designatedTime = pricing.getBestTime(schedule); else {} //ask master for best time changed = true; } } if (changed) nodeInfo.save(); return changed; }
double test1() { int t0[] = {17,50,2}; vector <int> p0(t0, t0+sizeof(t0)/sizeof(int)); Pricing * obj = new Pricing(); clock_t start = clock(); int my_answer = obj->maxSales(p0); clock_t end = clock(); delete obj; cout <<"Time: " <<(double)(end-start)/CLOCKS_PER_SEC <<" seconds" <<endl; int p1 = 69; cout <<"Desired answer: " <<endl; cout <<"\t" << p1 <<endl; cout <<"Your answer: " <<endl; cout <<"\t" << my_answer <<endl; if (p1 != my_answer) { cout <<"DOESN'T MATCH!!!!" <<endl <<endl; return -1; } else { cout <<"Match :-)" <<endl <<endl; return (double)(end-start)/CLOCKS_PER_SEC; } }