diff --git a/libraries/tests/mbed/stl/main.cpp b/libraries/tests/mbed/stl/main.cpp index 221f62f566..5466d515ca 100644 --- a/libraries/tests/mbed/stl/main.cpp +++ b/libraries/tests/mbed/stl/main.cpp @@ -1,54 +1,126 @@ -/* -start -one -two -three -elements in the map: -a1 => 50 -c3 => 150 -{success} -{end} - */ #include "test_env.h" +#include #include +#include #include #include +#include -using namespace std; +#define BUFFER_SIZE 128 +#define TABLE_SIZE(TAB) (sizeof(TAB) / sizeof(TAB[0])) -int main() { - printf("start"NL); - queue queueObject; - queueObject.push("one"); - queueObject.push("two"); - queueObject.push("three"); +#define NEGATIVE_INTEGERS -32768,-3214,-999,-100,-1,0,1,4231,999,4123,32760,99999 +#define POSITIVE_INTEGERS 32768,3214,999,100,1,0,1,4231,999,4123,32760,99999 +#define FLOATS 0.002,0.92430,15.91320,791.77368,6208.2,25719.4952,426815.982588,6429271.046,42468024.93,212006462.910 +#define FLOATS_STR "0.002","0.92430","15.91320","791.77368","6208.2","25719.4952","426815.982588","6429271.046","42468024.93","212006462.910" - while (!queueObject.empty()) { - string& s = queueObject.front(); - printf("%s"NL, s.c_str()); - queueObject.pop(); +template +void BubbleSort(T& array, size_t array_size, F functor) +{ + bool flag = true; + size_t numLength = array_size; + for(size_t i = 1; (i <= numLength) && flag; i++) { + flag = false; + for (size_t j = 0; j < (numLength - 1); j++) { + if (functor(array[j+1], array[j])) { + int temp = array[j]; + array[j] = array[j + 1]; + array[j+1] = temp; + flag = true; + } + } } - - map m; - map::iterator it; - - m["a1"] = "50"; - m["b2"] = "100"; - m["c3"] = "150"; - m["d4"] = "200"; - - it = m.find("b2"); - if (it == m.end()) { - printf("lookup error"NL); - } - - m.erase(it); - m.erase(m.find("d4")); - - printf("elements in the map:"NL); - printf("a1 => %s"NL, m.find("a1")->second.c_str()); - printf("c3 => %s"NL, m.find("c3")->second.c_str()); - - notify_completion(true); +} + +struct printInt { + void operator()(int i) { + printf("%d ", i); + } +}; + +struct printFloat { + void operator()(float f) { + printf("%f ", f); + } +}; + +struct printString { + void operator()(char* s) { + printf("%s ", s); + } +}; + +struct greaterAbs { + bool operator()(int a, int b) { + return abs(a) > abs(b); + } +}; + + +int main() +{ + char buffer[BUFFER_SIZE] = {0}; + int p_integers[] = {POSITIVE_INTEGERS}; + int n_integers[] = {NEGATIVE_INTEGERS}; + float floats[] = {FLOATS}; + + //std::vector v_nints(n_integers, n_integers + TABLE_SIZE(n_integers)); + //std::vector v_floats(floats, floats + TABLE_SIZE(floats)); + + bool result = true; + + { + std::vector v_pints(p_integers, p_integers + TABLE_SIZE(p_integers)); + bool equal_result = std::equal(v_pints.begin(), v_pints.end(), p_integers); + result = result && equal_result; + printf("[%s] Fill vector with data\r\n", equal_result ? "OK" : "FAIL"); + } + + { + char* floats_str[] = {FLOATS_STR}; + float floats_transform[TABLE_SIZE(floats_str)] = {0.0}; + std::transform(floats_str, floats_str + TABLE_SIZE(floats_str), floats_transform, atof); + bool equal_result = std::equal(floats_transform, floats_transform + TABLE_SIZE(floats_transform), floats); + result = result && equal_result; + printf("[%s] Transform float strings\r\n", equal_result ? "OK" : "FAIL"); + + std::for_each(floats_str, floats_str + TABLE_SIZE(floats_str), printString()); + printf("\r\n"); + std::for_each(floats_transform, floats_transform + TABLE_SIZE(floats_transform), printFloat()); + printf("\r\n"); + } + + { + std::vector v_nints_1(n_integers, n_integers + TABLE_SIZE(n_integers)); + std::vector v_nints_2(n_integers, n_integers + TABLE_SIZE(n_integers)); + { + BubbleSort(v_nints_1, v_nints_1.size(), std::greater()); + std::sort(v_nints_2.begin(), v_nints_2.end(), std::greater()); + bool equal_result = std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin()); + result = result && equal_result; + printf("[%s] Sort integers\r\n", equal_result ? "OK" : "FAIL"); + + std::for_each(v_nints_1.begin(), v_nints_1.end(), printInt()); + printf("\r\n"); + std::for_each(v_nints_2.begin(), v_nints_2.end(), printInt()); + printf("\r\n"); + } + + { + BubbleSort(v_nints_1, v_nints_1.size(), greaterAbs()); + std::sort(v_nints_2.begin(), v_nints_2.end(), greaterAbs()); + bool equal_result = std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin()); + result = result && equal_result; + printf("[%s] Sort integers\r\n", equal_result ? "OK" : "FAIL"); + + std::for_each(v_nints_1.begin(), v_nints_1.end(), printInt()); + printf("\r\n"); + std::for_each(v_nints_2.begin(), v_nints_2.end(), printInt()); + printf("\r\n"); + } + } + + notify_completion(result); + return 0; } diff --git a/workspace_tools/tests.py b/workspace_tools/tests.py index 228f16e541..fc966e0afb 100644 --- a/workspace_tools/tests.py +++ b/workspace_tools/tests.py @@ -92,7 +92,7 @@ TESTS = [ "id": "MBED_A3", "description": "C++ STL", "source_dir": join(TEST_DIR, "mbed", "stl"), "dependencies": [MBED_LIBRARIES, TEST_MBED_LIB], - "automated": False, + "automated": True, }, { "id": "MBED_A4", "description": "I2C TMP102", @@ -518,7 +518,6 @@ TESTS = [ "automated": True, }, - # CMSIS RTOS tests { "id": "CMSIS_RTOS_1", "description": "Basic",