1 /* 2 * Copyright (c) 2014-2017, Siemens AG. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 * POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 #ifndef BASE_C_TEST_COUNTER_TEST_H_ 28 #define BASE_C_TEST_COUNTER_TEST_H_ 29 30 #include <partest/partest.h> 31 #include <embb/base/c/counter.h> 32 33 namespace embb { 34 namespace base { 35 namespace test { 36 37 /** 38 * Provides tests for C counter functionality. 39 */ 40 class CounterTest : public partest::TestCase { 41 public: 42 /** 43 * Adds test units. 44 */ 45 CounterTest(); 46 47 private: 48 /** 49 * Checks the correct return values of inc., dec., and get methods. 50 */ 51 void TestBase(); 52 53 /** 54 * Test repeated incrementing and decrement by several threads. 55 */ 56 class TestStress : public partest::TestUnit { 57 public: 58 /** 59 * Adds test methods to unit. 60 */ 61 TestStress(); 62 63 private: 64 /** 65 * Inits the counter. 66 */ Init()67 void Init() { 68 embb_counter_init(&counter_); 69 } 70 /** 71 * Increases the counter. 72 */ TestCounterIncrement()73 void TestCounterIncrement() { 74 embb_counter_increment(&counter_); 75 } 76 77 /** 78 * Decreases the counter. 79 */ TestCounterDecrement()80 void TestCounterDecrement() { 81 embb_counter_decrement(&counter_); 82 } 83 84 /** 85 * Checks the value of the counter and deletes the counter. 86 */ 87 void CheckAndDestroyCounter(); 88 89 /** 90 * Counter used in tests. 91 */ 92 embb_counter_t counter_; 93 }; 94 }; 95 96 } // namespace test 97 } // namespace base 98 } // namespace embb 99 100 #endif // BASE_C_TEST_COUNTER_TEST_H_ 101