Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-os by
main.cpp
00001 /* 00002 * Copyright (c) 2013-2016, ARM Limited, All Rights Reserved 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00006 * not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00013 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 #include "mbed.h" 00018 #include "greentea-client/test_env.h" 00019 #include "unity/unity.h" 00020 #include "utest/utest.h" 00021 #include <stdio.h> 00022 #include <string.h> 00023 #include <algorithm> 00024 #include <string> 00025 #include <vector> 00026 #include <queue> 00027 #include <map> 00028 #include <math.h> 00029 00030 using namespace utest::v1; 00031 00032 #define TABLE_SIZE(TAB) (sizeof(TAB) / sizeof(TAB[0])) 00033 00034 #define NEGATIVE_INTEGERS -32768,-3214,-999,-100,-1,0,1,4231,999,4123,32760,99999 00035 #define POSITIVE_INTEGERS 32768,3214,999,100,1,0,1,4231,999,4123,32760,99999 00036 #define FLOATS 0.002,0.92430,15.91320,791.77368,6208.2,25719.4952,426815.982588,6429271.046,42468024.93,212006462.910 00037 #define FLOATS_STR "0.002","0.92430","15.91320","791.77368","6208.2","25719.4952","426815.982588","6429271.046","42468024.93","212006462.910" 00038 00039 00040 namespace { 00041 int p_integers[] = {POSITIVE_INTEGERS}; 00042 int n_integers[] = {NEGATIVE_INTEGERS}; 00043 float floats[] = {FLOATS}; 00044 00045 template <class T, class F> 00046 void BubbleSort(T& _array, size_t array_size, F functor) { 00047 bool flag = true; 00048 size_t numLength = array_size; 00049 for(size_t i = 1; (i <= numLength) && flag; i++) { 00050 flag = false; 00051 for (size_t j = 0; j < (numLength - 1); j++) { 00052 if (functor(_array[j+1], _array[j])) { 00053 int temp = _array[j]; 00054 _array[j] = _array[j + 1]; 00055 _array[j+1] = temp; 00056 flag = true; 00057 } 00058 } 00059 } 00060 } 00061 00062 struct printInt { 00063 void operator()(int i) { printf("%d ", i); } 00064 }; 00065 00066 struct printFloat { 00067 void operator()(float f) { printf("%f ", f); } 00068 }; 00069 00070 struct printString { 00071 void operator()(const char* s) { printf("%s ", s); } 00072 }; 00073 00074 struct greaterAbs { 00075 bool operator()(int a, int b) { return abs(a) > abs(b); } 00076 }; 00077 00078 } // namespace 00079 00080 void test_case_stl_equal() { 00081 std::vector<int> v_pints(p_integers, p_integers + TABLE_SIZE(p_integers)); 00082 TEST_ASSERT_TRUE(std::equal(v_pints.begin(), v_pints.end(), p_integers)); 00083 } 00084 00085 void test_case_stl_transform() { 00086 const char* floats_str[] = {FLOATS_STR}; 00087 float floats_transform[TABLE_SIZE(floats_str)] = {0.0}; 00088 std::transform(floats_str, floats_str + TABLE_SIZE(floats_str), floats_transform, atof); 00089 //printf("stl_transform::floats_str: "); 00090 //std::for_each(floats_str, floats_str + TABLE_SIZE(floats_str), printString()); 00091 //printf("stl_transform::floats_transform: "); 00092 //std::for_each(floats_transform, floats_transform + TABLE_SIZE(floats_transform), printFloat()); 00093 //printf("\n"); 00094 00095 TEST_ASSERT_TRUE(std::equal(floats_transform, floats_transform + TABLE_SIZE(floats_transform), floats)); 00096 } 00097 00098 void test_case_stl_sort_greater() { 00099 std::vector<int> v_nints_1(n_integers, n_integers + TABLE_SIZE(n_integers)); 00100 std::vector<int> v_nints_2(n_integers, n_integers + TABLE_SIZE(n_integers)); 00101 00102 BubbleSort(v_nints_1, v_nints_1.size(), std::greater<int>()); 00103 std::sort(v_nints_2.begin(), v_nints_2.end(), std::greater<int>()); 00104 00105 TEST_ASSERT_TRUE(std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin())); 00106 } 00107 00108 void test_case_stl_sort_abs() { 00109 std::vector<int> v_nints_1(n_integers, n_integers + TABLE_SIZE(n_integers)); 00110 std::vector<int> v_nints_2(n_integers, n_integers + TABLE_SIZE(n_integers)); 00111 00112 BubbleSort(v_nints_1, v_nints_1.size(), greaterAbs()); 00113 std::sort(v_nints_2.begin(), v_nints_2.end(), greaterAbs()); 00114 00115 TEST_ASSERT_TRUE(std::equal(v_nints_1.begin(), v_nints_1.end(), v_nints_2.begin())); 00116 } 00117 00118 utest::v1::status_t greentea_failure_handler(const Case *const source, const failure_t reason) { 00119 greentea_case_failure_abort_handler(source, reason); 00120 return STATUS_CONTINUE; 00121 } 00122 00123 Case cases[] = { 00124 Case("STL std::equal", test_case_stl_equal, greentea_failure_handler), 00125 Case("STL std::transform", test_case_stl_transform, greentea_failure_handler), 00126 Case("STL std::sort greater", test_case_stl_sort_greater, greentea_failure_handler), 00127 Case("STL std::sort abs", test_case_stl_sort_abs, greentea_failure_handler) 00128 }; 00129 00130 utest::v1::status_t greentea_test_setup(const size_t number_of_cases) { 00131 GREENTEA_SETUP(5, "default_auto"); 00132 return greentea_test_setup_handler(number_of_cases); 00133 } 00134 00135 Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler); 00136 00137 int main() { 00138 Harness::run(specification); 00139 }
Generated on Tue Jul 12 2022 13:15:58 by
