Rtos API example

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "test_env.h"
00002 
00003 #include <algorithm>
00004 #include <string>
00005 #include <vector>
00006 #include <queue>
00007 #include <map>
00008 #include <math.h>
00009 
00010 #define BUFFER_SIZE 128
00011 #define TABLE_SIZE(TAB) (sizeof(TAB) / sizeof(TAB[0]))
00012 
00013 #define NEGATIVE_INTEGERS -32768,-3214,-999,-100,-1,0,1,4231,999,4123,32760,99999
00014 #define POSITIVE_INTEGERS 32768,3214,999,100,1,0,1,4231,999,4123,32760,99999
00015 #define FLOATS  0.002,0.92430,15.91320,791.77368,6208.2,25719.4952,426815.982588,6429271.046,42468024.93,212006462.910
00016 #define FLOATS_STR  "0.002","0.92430","15.91320","791.77368","6208.2","25719.4952","426815.982588","6429271.046","42468024.93","212006462.910"
00017 
00018 template <class T, class F>
00019 void BubbleSort(T& array, size_t array_size, F functor)
00020 {
00021     bool flag = true;
00022     size_t numLength = array_size;
00023     for(size_t i = 1; (i <= numLength) && flag; i++) {
00024         flag = false;
00025         for (size_t j = 0; j < (numLength - 1); j++) {
00026             if (functor(array[j+1], array[j])) {
00027                 int temp = array[j];
00028                 array[j] = array[j + 1];
00029                 array[j+1] = temp;
00030                 flag = true;
00031             }
00032         }
00033     }
00034 }
00035 
00036 struct printInt {
00037     void operator()(int i) {
00038         printf("%d ", i);
00039     }
00040 };
00041 
00042 struct printFloat {
00043     void operator()(float f) {
00044         printf("%f ", f);
00045     }
00046 };
00047 
00048 struct printString {
00049     void operator()(char* s) {
00050         printf("%s ", s);
00051     }
00052 };
00053 
00054 struct greaterAbs {
00055     bool operator()(int a, int b) {
00056         return abs(a) > abs(b);
00057     }
00058 };
00059 
00060 
00061 int main()
00062 {
00063     int p_integers[] = {POSITIVE_INTEGERS};
00064     int n_integers[] = {NEGATIVE_INTEGERS};
00065     float floats[] = {FLOATS};
00066     bool result = true;
00067 
00068     {
00069         std::vector<int> v_pints(p_integers, p_integers + TABLE_SIZE(p_integers));
00070         bool equal_result = std::equal(v_pints.begin(), v_pints.end(), p_integers);
00071         result = result && equal_result;
00072         printf("[%s] Fill vector with data\r\n", equal_result ? "OK" : "FAIL");
00073     }
00074 
00075     {
00076         char* floats_str[] = {FLOATS_STR};
00077         float floats_transform[TABLE_SIZE(floats_str)] = {0.0};
00078         std::transform(floats_str, floats_str + TABLE_SIZE(floats_str), floats_transform, atof);
00079         bool equal_result = std::equal(floats_transform, floats_transform + TABLE_SIZE(floats_transform), floats);
00080         result = result && equal_result;
00081         printf("[%s] Transform float strings\r\n", equal_result ? "OK" : "FAIL");
00082 
00083         std::for_each(floats_str, floats_str + TABLE_SIZE(floats_str), printString());
00084         printf("\r\n");
00085         std::for_each(floats_transform, floats_transform + TABLE_SIZE(floats_transform), printFloat());
00086         printf("\r\n");
00087     }
00088 
00089     {
00090         std::vector<int> v_nints_1(n_integers, n_integers + TABLE_SIZE(n_integers));
00091         std::vector<int> v_nints_2(n_integers, n_integers + TABLE_SIZE(n_integers));
00092         {
00093             BubbleSort(v_nints_1, v_nints_1.size(), std::greater<int>());
00094             std::sort(v_nints_2.begin(), v_nints_2.end(), std::greater<int>());
00095             bool equal_result = std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin());
00096             result = result && equal_result;
00097             printf("[%s] Sort integers\r\n", equal_result ? "OK" : "FAIL");
00098 
00099             std::for_each(v_nints_1.begin(), v_nints_1.end(), printInt());
00100             printf("\r\n");
00101             std::for_each(v_nints_2.begin(), v_nints_2.end(), printInt());
00102             printf("\r\n");
00103         }
00104 
00105         {
00106             BubbleSort(v_nints_1, v_nints_1.size(), greaterAbs());
00107             std::sort(v_nints_2.begin(), v_nints_2.end(), greaterAbs());
00108             bool equal_result = std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin());
00109             result = result && equal_result;
00110             printf("[%s] Sort integers\r\n", equal_result ? "OK" : "FAIL");
00111 
00112             std::for_each(v_nints_1.begin(), v_nints_1.end(), printInt());
00113             printf("\r\n");
00114             std::for_each(v_nints_2.begin(), v_nints_2.end(), printInt());
00115             printf("\r\n");
00116         }
00117     }
00118 
00119     notify_completion(result);
00120     return 0;
00121 }