PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Apr 11 08:15:48 2020 +0000
Revision:
1:b36bbc1c6d27
Parent:
0:6bf0743ece18
IMU-library in .h und .cpp file aufgeteilt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 /*
demayer 0:6bf0743ece18 2 * Copyright (c) 2013-2016, ARM Limited, All Rights Reserved
demayer 0:6bf0743ece18 3 * SPDX-License-Identifier: Apache-2.0
demayer 0:6bf0743ece18 4 *
demayer 0:6bf0743ece18 5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
demayer 0:6bf0743ece18 6 * not use this file except in compliance with the License.
demayer 0:6bf0743ece18 7 * You may obtain a copy of the License at
demayer 0:6bf0743ece18 8 *
demayer 0:6bf0743ece18 9 * http://www.apache.org/licenses/LICENSE-2.0
demayer 0:6bf0743ece18 10 *
demayer 0:6bf0743ece18 11 * Unless required by applicable law or agreed to in writing, software
demayer 0:6bf0743ece18 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
demayer 0:6bf0743ece18 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
demayer 0:6bf0743ece18 14 * See the License for the specific language governing permissions and
demayer 0:6bf0743ece18 15 * limitations under the License.
demayer 0:6bf0743ece18 16 */
demayer 0:6bf0743ece18 17 #include "mbed.h"
demayer 0:6bf0743ece18 18 #include "greentea-client/test_env.h"
demayer 0:6bf0743ece18 19 #include "unity/unity.h"
demayer 0:6bf0743ece18 20 #include "utest/utest.h"
demayer 0:6bf0743ece18 21 #include "mbed_stats.h"
demayer 0:6bf0743ece18 22 #include <stdlib.h>
demayer 0:6bf0743ece18 23 #include <stdio.h>
demayer 0:6bf0743ece18 24
demayer 0:6bf0743ece18 25 #if !defined(MBED_HEAP_STATS_ENABLED)
demayer 0:6bf0743ece18 26 #error [NOT_SUPPORTED] test not supported
demayer 0:6bf0743ece18 27 #endif
demayer 0:6bf0743ece18 28
demayer 0:6bf0743ece18 29 using namespace utest::v1;
demayer 0:6bf0743ece18 30
demayer 0:6bf0743ece18 31 #define ALLOCATION_SIZE_DEFAULT 564
demayer 0:6bf0743ece18 32 #define ALLOCATION_SIZE_SMALL 124
demayer 0:6bf0743ece18 33 #define ALLOCATION_SIZE_LARGE 700
demayer 0:6bf0743ece18 34 #define ALLOCATION_SIZE_FAIL (1024 * 1024 *1024)
demayer 0:6bf0743ece18 35
demayer 0:6bf0743ece18 36 typedef void* (*malloc_cb_t) (uint32_t size);
demayer 0:6bf0743ece18 37
demayer 0:6bf0743ece18 38 static void* thunk_malloc(uint32_t size);
demayer 0:6bf0743ece18 39 static void* thunk_calloc_1(uint32_t size);
demayer 0:6bf0743ece18 40 static void* thunk_calloc_4(uint32_t size);
demayer 0:6bf0743ece18 41 static void* thunk_realloc(uint32_t size);
demayer 0:6bf0743ece18 42
demayer 0:6bf0743ece18 43 malloc_cb_t malloc_thunk_array[] = {
demayer 0:6bf0743ece18 44 thunk_malloc,
demayer 0:6bf0743ece18 45 thunk_calloc_1,
demayer 0:6bf0743ece18 46 thunk_calloc_4,
demayer 0:6bf0743ece18 47 thunk_realloc,
demayer 0:6bf0743ece18 48 };
demayer 0:6bf0743ece18 49
demayer 0:6bf0743ece18 50 void test_case_malloc_free_size()
demayer 0:6bf0743ece18 51 {
demayer 0:6bf0743ece18 52 mbed_stats_heap_t stats_start;
demayer 0:6bf0743ece18 53 mbed_stats_heap_t stats_current;
demayer 0:6bf0743ece18 54 void *data;
demayer 0:6bf0743ece18 55
demayer 0:6bf0743ece18 56 mbed_stats_heap_get(&stats_start);
demayer 0:6bf0743ece18 57
demayer 0:6bf0743ece18 58 for (uint32_t i = 0; i < sizeof(malloc_thunk_array) / sizeof(malloc_cb_t); i++) {
demayer 0:6bf0743ece18 59
demayer 0:6bf0743ece18 60 // Allocate memory and assert size change
demayer 0:6bf0743ece18 61 data = malloc_thunk_array[i](ALLOCATION_SIZE_DEFAULT);
demayer 0:6bf0743ece18 62 TEST_ASSERT(data != NULL);
demayer 0:6bf0743ece18 63 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 64 uint32_t increase = stats_current.current_size - stats_start.current_size;
demayer 0:6bf0743ece18 65 TEST_ASSERT_EQUAL_UINT32(ALLOCATION_SIZE_DEFAULT, increase);
demayer 0:6bf0743ece18 66 TEST_ASSERT_EQUAL_UINT32(stats_start.total_size + ALLOCATION_SIZE_DEFAULT * (i + 1), stats_current.total_size);
demayer 0:6bf0743ece18 67 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_cnt + 1, stats_current.alloc_cnt);
demayer 0:6bf0743ece18 68 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_fail_cnt, stats_current.alloc_fail_cnt);
demayer 0:6bf0743ece18 69
demayer 0:6bf0743ece18 70 // Free memory and assert back to starting size
demayer 0:6bf0743ece18 71 free(data);
demayer 0:6bf0743ece18 72 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 73 TEST_ASSERT_EQUAL_UINT32(stats_start.current_size, stats_current.current_size);
demayer 0:6bf0743ece18 74 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_cnt, stats_current.alloc_cnt);
demayer 0:6bf0743ece18 75 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_fail_cnt, stats_current.alloc_fail_cnt);
demayer 0:6bf0743ece18 76 }
demayer 0:6bf0743ece18 77 }
demayer 0:6bf0743ece18 78
demayer 0:6bf0743ece18 79 void test_case_allocate_zero()
demayer 0:6bf0743ece18 80 {
demayer 0:6bf0743ece18 81 mbed_stats_heap_t stats_start;
demayer 0:6bf0743ece18 82 mbed_stats_heap_t stats_current;
demayer 0:6bf0743ece18 83 void *data;
demayer 0:6bf0743ece18 84
demayer 0:6bf0743ece18 85 mbed_stats_heap_get(&stats_start);
demayer 0:6bf0743ece18 86
demayer 0:6bf0743ece18 87 for (uint32_t i = 0; i < sizeof(malloc_thunk_array) / sizeof(malloc_cb_t); i++) {
demayer 0:6bf0743ece18 88
demayer 0:6bf0743ece18 89 // Allocate memory and assert size change
demayer 0:6bf0743ece18 90 data = malloc_thunk_array[i](0);
demayer 0:6bf0743ece18 91 // Return can be NULL
demayer 0:6bf0743ece18 92 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 93 TEST_ASSERT_EQUAL_UINT32(stats_start.current_size, stats_current.current_size);
demayer 0:6bf0743ece18 94 TEST_ASSERT_EQUAL_UINT32(stats_start.total_size, stats_current.total_size);
demayer 0:6bf0743ece18 95 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_fail_cnt, stats_current.alloc_fail_cnt);
demayer 0:6bf0743ece18 96
demayer 0:6bf0743ece18 97 // Free memory and assert back to starting size
demayer 0:6bf0743ece18 98 free(data);
demayer 0:6bf0743ece18 99 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 100 TEST_ASSERT_EQUAL_UINT32(stats_start.current_size, stats_current.current_size);
demayer 0:6bf0743ece18 101 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_cnt, stats_current.alloc_cnt);
demayer 0:6bf0743ece18 102 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_fail_cnt, stats_current.alloc_fail_cnt);
demayer 0:6bf0743ece18 103 }
demayer 0:6bf0743ece18 104 }
demayer 0:6bf0743ece18 105
demayer 0:6bf0743ece18 106 void test_case_allocate_fail()
demayer 0:6bf0743ece18 107 {
demayer 0:6bf0743ece18 108 mbed_stats_heap_t stats_start;
demayer 0:6bf0743ece18 109 mbed_stats_heap_t stats_current;
demayer 0:6bf0743ece18 110 void *data;
demayer 0:6bf0743ece18 111
demayer 0:6bf0743ece18 112 mbed_stats_heap_get(&stats_start);
demayer 0:6bf0743ece18 113
demayer 0:6bf0743ece18 114 for (uint32_t i = 0; i < sizeof(malloc_thunk_array) / sizeof(malloc_cb_t); i++) {
demayer 0:6bf0743ece18 115
demayer 0:6bf0743ece18 116 // Trigger a failure by trying to allocate a buffer that won't fit
demayer 0:6bf0743ece18 117 data = malloc_thunk_array[i](ALLOCATION_SIZE_FAIL);
demayer 0:6bf0743ece18 118 TEST_ASSERT(data == NULL);
demayer 0:6bf0743ece18 119 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 120 TEST_ASSERT_EQUAL_UINT32(stats_start.current_size, stats_current.current_size);
demayer 0:6bf0743ece18 121 TEST_ASSERT_EQUAL_UINT32(stats_start.total_size, stats_current.total_size);
demayer 0:6bf0743ece18 122 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_cnt, stats_current.alloc_cnt);
demayer 0:6bf0743ece18 123 TEST_ASSERT_EQUAL_UINT32(stats_start.alloc_fail_cnt + i + 1, stats_current.alloc_fail_cnt);
demayer 0:6bf0743ece18 124 }
demayer 0:6bf0743ece18 125 }
demayer 0:6bf0743ece18 126
demayer 0:6bf0743ece18 127 static void* thunk_malloc(uint32_t size)
demayer 0:6bf0743ece18 128 {
demayer 0:6bf0743ece18 129 return malloc(size);
demayer 0:6bf0743ece18 130 }
demayer 0:6bf0743ece18 131
demayer 0:6bf0743ece18 132 static void* thunk_calloc_1(uint32_t size)
demayer 0:6bf0743ece18 133 {
demayer 0:6bf0743ece18 134 return calloc(size / 1, 1);
demayer 0:6bf0743ece18 135 }
demayer 0:6bf0743ece18 136
demayer 0:6bf0743ece18 137 static void* thunk_calloc_4(uint32_t size)
demayer 0:6bf0743ece18 138 {
demayer 0:6bf0743ece18 139 return calloc(size / 4, 4);
demayer 0:6bf0743ece18 140 }
demayer 0:6bf0743ece18 141
demayer 0:6bf0743ece18 142
demayer 0:6bf0743ece18 143 static void* thunk_realloc(uint32_t size)
demayer 0:6bf0743ece18 144 {
demayer 0:6bf0743ece18 145 return realloc(NULL, size);
demayer 0:6bf0743ece18 146 }
demayer 0:6bf0743ece18 147
demayer 0:6bf0743ece18 148 void test_case_realloc_size()
demayer 0:6bf0743ece18 149 {
demayer 0:6bf0743ece18 150 mbed_stats_heap_t stats_start;
demayer 0:6bf0743ece18 151 mbed_stats_heap_t stats_current;
demayer 0:6bf0743ece18 152 uint32_t increase;
demayer 0:6bf0743ece18 153 void *data;
demayer 0:6bf0743ece18 154
demayer 0:6bf0743ece18 155 mbed_stats_heap_get(&stats_start);
demayer 0:6bf0743ece18 156
demayer 0:6bf0743ece18 157 // Allocate memory and assert size change
demayer 0:6bf0743ece18 158 data = realloc(NULL, ALLOCATION_SIZE_DEFAULT);
demayer 0:6bf0743ece18 159 TEST_ASSERT(data != NULL);
demayer 0:6bf0743ece18 160 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 161 increase = stats_current.current_size - stats_start.current_size;
demayer 0:6bf0743ece18 162 TEST_ASSERT_EQUAL_UINT32(increase, ALLOCATION_SIZE_DEFAULT);
demayer 0:6bf0743ece18 163
demayer 0:6bf0743ece18 164 // Decrease size and assert size change
demayer 0:6bf0743ece18 165 data = realloc(data, ALLOCATION_SIZE_SMALL);
demayer 0:6bf0743ece18 166 TEST_ASSERT(data != NULL);
demayer 0:6bf0743ece18 167 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 168 increase = stats_current.current_size - stats_start.current_size;
demayer 0:6bf0743ece18 169 TEST_ASSERT_EQUAL_UINT32(increase, ALLOCATION_SIZE_SMALL);
demayer 0:6bf0743ece18 170
demayer 0:6bf0743ece18 171 // Increase size and assert size change
demayer 0:6bf0743ece18 172 data = realloc(data, ALLOCATION_SIZE_LARGE);
demayer 0:6bf0743ece18 173 TEST_ASSERT(data != NULL);
demayer 0:6bf0743ece18 174 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 175 increase = stats_current.current_size - stats_start.current_size;
demayer 0:6bf0743ece18 176 TEST_ASSERT_EQUAL_UINT32(increase, ALLOCATION_SIZE_LARGE);
demayer 0:6bf0743ece18 177
demayer 0:6bf0743ece18 178 // Free memory and assert back to starting size
demayer 0:6bf0743ece18 179 free(data);
demayer 0:6bf0743ece18 180 mbed_stats_heap_get(&stats_current);
demayer 0:6bf0743ece18 181 TEST_ASSERT_EQUAL_UINT32(stats_start.current_size, stats_current.current_size);
demayer 0:6bf0743ece18 182 }
demayer 0:6bf0743ece18 183
demayer 0:6bf0743ece18 184 Case cases[] = {
demayer 0:6bf0743ece18 185 Case("malloc and free size", test_case_malloc_free_size),
demayer 0:6bf0743ece18 186 Case("allocate size zero", test_case_allocate_zero),
demayer 0:6bf0743ece18 187 Case("allocation failure", test_case_allocate_fail),
demayer 0:6bf0743ece18 188 Case("realloc size", test_case_realloc_size),
demayer 0:6bf0743ece18 189 };
demayer 0:6bf0743ece18 190
demayer 0:6bf0743ece18 191 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
demayer 0:6bf0743ece18 192 {
demayer 0:6bf0743ece18 193 GREENTEA_SETUP(20, "default_auto");
demayer 0:6bf0743ece18 194 return greentea_test_setup_handler(number_of_cases);
demayer 0:6bf0743ece18 195 }
demayer 0:6bf0743ece18 196
demayer 0:6bf0743ece18 197 Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler);
demayer 0:6bf0743ece18 198
demayer 0:6bf0743ece18 199 int main()
demayer 0:6bf0743ece18 200 {
demayer 0:6bf0743ece18 201 Harness::run(specification);
demayer 0:6bf0743ece18 202 }