mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 #include <utility> // std::pair
be_bryan 0:b74591d5ab33 2 #include "mbed.h"
be_bryan 0:b74591d5ab33 3 #include "test_env.h"
be_bryan 0:b74591d5ab33 4
be_bryan 0:b74591d5ab33 5 uint32_t test_64(uint64_t ticks) {
be_bryan 0:b74591d5ab33 6 ticks >>= 3; // divide by 8
be_bryan 0:b74591d5ab33 7 if (ticks > 0xFFFFFFFF) {
be_bryan 0:b74591d5ab33 8 ticks /= 3;
be_bryan 0:b74591d5ab33 9 } else {
be_bryan 0:b74591d5ab33 10 ticks = (ticks * 0x55555556) >> 32; // divide by 3
be_bryan 0:b74591d5ab33 11 }
be_bryan 0:b74591d5ab33 12 return (uint32_t)(0xFFFFFFFF & ticks);
be_bryan 0:b74591d5ab33 13 }
be_bryan 0:b74591d5ab33 14
be_bryan 0:b74591d5ab33 15 const char *result_str(bool result) {
be_bryan 0:b74591d5ab33 16 return result ? "[OK]" : "[FAIL]";
be_bryan 0:b74591d5ab33 17 }
be_bryan 0:b74591d5ab33 18
be_bryan 0:b74591d5ab33 19 int main() {
be_bryan 0:b74591d5ab33 20 MBED_HOSTTEST_TIMEOUT(20);
be_bryan 0:b74591d5ab33 21 MBED_HOSTTEST_SELECT(default_auto);
be_bryan 0:b74591d5ab33 22 MBED_HOSTTEST_DESCRIPTION(Integer constant division);
be_bryan 0:b74591d5ab33 23 MBED_HOSTTEST_START("MBED_26");
be_bryan 0:b74591d5ab33 24
be_bryan 0:b74591d5ab33 25 bool result = true;
be_bryan 0:b74591d5ab33 26
be_bryan 0:b74591d5ab33 27 { // 0xFFFFFFFF * 8 = 0x7fffffff8
be_bryan 0:b74591d5ab33 28 std::pair<uint32_t, uint64_t> values = std::make_pair(0x55555555, 0x7FFFFFFF8);
be_bryan 0:b74591d5ab33 29 uint32_t test_ret = test_64(values.second);
be_bryan 0:b74591d5ab33 30 bool test_res = values.first == test_ret;
be_bryan 0:b74591d5ab33 31 result = result && test_res;
be_bryan 0:b74591d5ab33 32 printf("64bit: 0x7FFFFFFF8: expected 0x%lX got 0x%lX ... %s\r\n", values.first, test_ret, result_str(test_res));
be_bryan 0:b74591d5ab33 33 }
be_bryan 0:b74591d5ab33 34
be_bryan 0:b74591d5ab33 35 { // 0xFFFFFFFF * 24 = 0x17ffffffe8
be_bryan 0:b74591d5ab33 36 std::pair<uint32_t, uint64_t> values = std::make_pair(0xFFFFFFFF, 0x17FFFFFFE8);
be_bryan 0:b74591d5ab33 37 uint32_t test_ret = test_64(values.second);
be_bryan 0:b74591d5ab33 38 bool test_res = values.first == test_ret;
be_bryan 0:b74591d5ab33 39 result = result && test_res;
be_bryan 0:b74591d5ab33 40 printf("64bit: 0x17FFFFFFE8: expected 0x%lX got 0x%lX ... %s\r\n", values.first, test_ret, result_str(test_res));
be_bryan 0:b74591d5ab33 41 }
be_bryan 0:b74591d5ab33 42
be_bryan 0:b74591d5ab33 43 MBED_HOSTTEST_RESULT(result);
be_bryan 0:b74591d5ab33 44 }