]> git.gir.st - tmk_keyboard.git/blob - tool/mbed/mbed-sdk/libraries/tests/mbed/stl/main.cpp
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[tmk_keyboard.git] / tool / mbed / mbed-sdk / libraries / tests / mbed / stl / main.cpp
1 #include "test_env.h"
2
3 #include <algorithm>
4 #include <string>
5 #include <vector>
6 #include <queue>
7 #include <map>
8 #include <math.h>
9
10 #define BUFFER_SIZE 128
11 #define TABLE_SIZE(TAB) (sizeof(TAB) / sizeof(TAB[0]))
12
13 #define NEGATIVE_INTEGERS -32768,-3214,-999,-100,-1,0,1,4231,999,4123,32760,99999
14 #define POSITIVE_INTEGERS 32768,3214,999,100,1,0,1,4231,999,4123,32760,99999
15 #define FLOATS 0.002,0.92430,15.91320,791.77368,6208.2,25719.4952,426815.982588,6429271.046,42468024.93,212006462.910
16 #define FLOATS_STR "0.002","0.92430","15.91320","791.77368","6208.2","25719.4952","426815.982588","6429271.046","42468024.93","212006462.910"
17
18 template <class T, class F>
19 void BubbleSort(T& array, size_t array_size, F functor)
20 {
21 bool flag = true;
22 size_t numLength = array_size;
23 for(size_t i = 1; (i <= numLength) && flag; i++) {
24 flag = false;
25 for (size_t j = 0; j < (numLength - 1); j++) {
26 if (functor(array[j+1], array[j])) {
27 int temp = array[j];
28 array[j] = array[j + 1];
29 array[j+1] = temp;
30 flag = true;
31 }
32 }
33 }
34 }
35
36 struct printInt {
37 void operator()(int i) {
38 printf("%d ", i);
39 }
40 };
41
42 struct printFloat {
43 void operator()(float f) {
44 printf("%f ", f);
45 }
46 };
47
48 struct printString {
49 void operator()(char* s) {
50 printf("%s ", s);
51 }
52 };
53
54 struct greaterAbs {
55 bool operator()(int a, int b) {
56 return abs(a) > abs(b);
57 }
58 };
59
60
61 int main()
62 {
63 int p_integers[] = {POSITIVE_INTEGERS};
64 int n_integers[] = {NEGATIVE_INTEGERS};
65 float floats[] = {FLOATS};
66 bool result = true;
67
68 {
69 std::vector<int> v_pints(p_integers, p_integers + TABLE_SIZE(p_integers));
70 bool equal_result = std::equal(v_pints.begin(), v_pints.end(), p_integers);
71 result = result && equal_result;
72 printf("[%s] Fill vector with data\r\n", equal_result ? "OK" : "FAIL");
73 }
74
75 {
76 char* floats_str[] = {FLOATS_STR};
77 float floats_transform[TABLE_SIZE(floats_str)] = {0.0};
78 std::transform(floats_str, floats_str + TABLE_SIZE(floats_str), floats_transform, atof);
79 bool equal_result = std::equal(floats_transform, floats_transform + TABLE_SIZE(floats_transform), floats);
80 result = result && equal_result;
81 printf("[%s] Transform float strings\r\n", equal_result ? "OK" : "FAIL");
82
83 std::for_each(floats_str, floats_str + TABLE_SIZE(floats_str), printString());
84 printf("\r\n");
85 std::for_each(floats_transform, floats_transform + TABLE_SIZE(floats_transform), printFloat());
86 printf("\r\n");
87 }
88
89 {
90 std::vector<int> v_nints_1(n_integers, n_integers + TABLE_SIZE(n_integers));
91 std::vector<int> v_nints_2(n_integers, n_integers + TABLE_SIZE(n_integers));
92 {
93 BubbleSort(v_nints_1, v_nints_1.size(), std::greater<int>());
94 std::sort(v_nints_2.begin(), v_nints_2.end(), std::greater<int>());
95 bool equal_result = std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin());
96 result = result && equal_result;
97 printf("[%s] Sort integers\r\n", equal_result ? "OK" : "FAIL");
98
99 std::for_each(v_nints_1.begin(), v_nints_1.end(), printInt());
100 printf("\r\n");
101 std::for_each(v_nints_2.begin(), v_nints_2.end(), printInt());
102 printf("\r\n");
103 }
104
105 {
106 BubbleSort(v_nints_1, v_nints_1.size(), greaterAbs());
107 std::sort(v_nints_2.begin(), v_nints_2.end(), greaterAbs());
108 bool equal_result = std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin());
109 result = result && equal_result;
110 printf("[%s] Sort integers\r\n", equal_result ? "OK" : "FAIL");
111
112 std::for_each(v_nints_1.begin(), v_nints_1.end(), printInt());
113 printf("\r\n");
114 std::for_each(v_nints_2.begin(), v_nints_2.end(), printInt());
115 printf("\r\n");
116 }
117 }
118
119 notify_completion(result);
120 return 0;
121 }
Imprint / Impressum