#include <cstdint>
#include <iostream>
#include <limits>
using namespace std;
static uint32_t current_time = numeric_limits<uint32_t>::max() - 1000;
uint32_t millis() {
return current_time;
}
void advance_time(uint32_t amount) {
cout << "... time advances by " << amount << "ms ..." << endl;
current_time += amount;
}
int main() {
uint32_t curr_millis = millis();
cout << "millis() = " << millis() << endl;
uint32_t next_gps_update = millis() + 1000;
cout << "next_gps_update = millis() + 1000 = " << next_gps_update << " (unsigned: " << uint32_t(next_gps_update) << ")" << endl;
advance_time(1);
cout << "millis() = " << millis() << endl;
cout << "int32(millis() - next_gps_update) = " << int32_t(millis() - next_gps_update) << endl;
cout << "int32(millis() - next_gps_update) >= 0 = " << (int32_t(millis() - next_gps_update) >= 0) << endl;
advance_time(998);
cout << "millis() = " << millis() << endl;
cout << "int32(millis() - next_gps_update) = " << int32_t(millis() - next_gps_update) << endl;
cout << "int32(millis() - next_gps_update) >= 0 = " << (int32_t(millis() - next_gps_update) >= 0) << endl;
advance_time(10);
cout << "millis() = " << millis() << endl;
cout << "int32(millis() - next_gps_update) = " << int32_t(millis() - next_gps_update) << endl;
cout << "int32(millis() - next_gps_update) >= 0 = " << (int32_t(millis() - next_gps_update) >= 0) << endl;
next_gps_update = millis() + 1000;
cout << "next_gps_update = millis() + 1000 = " << next_gps_update << " (unsigned: " << uint32_t(next_gps_update) << ")" << endl;
advance_time(10);
cout << "millis() = " << millis() << endl;
cout << "int32(millis() - next_gps_update) = " << int32_t(millis() - next_gps_update) << endl;
cout << "int32(millis() - next_gps_update) >= 0 = " << (int32_t(millis() - next_gps_update) >= 0) << endl;
return 0;
}