ON Semiconductor / mbed-os

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
group-onsemi
Date:
Wed Jan 25 20:34:15 2017 +0000
Revision:
0:098463de4c5d
Initial commit

Who changed what in which revision?

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