1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
/*******************************************************************************
* Copyright (c) 2017 protos software gmbh (http://www.protos.de).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* CONTRIBUTORS:
* Jan Belle (initial contribution)
*
*******************************************************************************/
#include "TestEtStaticDeque.h"
#include "etUnit/etUnit.h"
#include "container/etStaticDeque.h"
typedef struct {
int attr1;
double attr2;
const char* attr3;
}
DataClass;
bool compareDataClass(DataClass* d1, DataClass* d2) {
return d1->attr1 == d2->attr1
&& d1->attr2 == d2->attr2
&& d1->attr3 == d2->attr3;
}
void TestEtStaticDeque_testConstruct(etInt16 caseId) {
const char* failMsg = "testConstructors failed";
// Test constructor StaticDeque(void)
etStaticDeque deque;
int memory[10];
etStaticDeque_construct(&deque, memory, 10, sizeof(int));
EXPECT_EQUAL_INT32(caseId, failMsg, 0, deque.size);
EXPECT_TRUE(caseId, failMsg, deque.size == 0);
}
void TestEtStaticDeque_testPushPop(etInt16 caseId) {
const char* failMsg = "testPushPop failed";
// Test push_back and push_front with 6 objects of type DataClass
etStaticDeque deque;
DataClass memory[6];
etStaticDeque_construct(&deque, memory, 6, sizeof(DataClass));
DataClass d1 = { 1, 1.5, "Data 1" };
DataClass d2 = { 2, 2.5, "Data 2" };
DataClass d3 = { 3, 3.5, "Data 3" };
DataClass d4 = { 4, 4.5, "Data 4" };
DataClass d5 = { 5, 5.5, "Data 5" };
DataClass d6 = { 1, 1.5, "Data 6" };
etStaticDeque_push_front(&deque, &d3);
etStaticDeque_push_front(&deque, &d2);
etStaticDeque_push_back(&deque, &d4);
etStaticDeque_push_front(&deque, &d1);
etStaticDeque_push_back(&deque, &d5);
etStaticDeque_push_back(&deque, &d6);
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d1, etStaticDeque_front(&deque)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d2, etStaticDeque_get(&deque, 1)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d3, etStaticDeque_get(&deque, 2)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d4, etStaticDeque_get(&deque, 3)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d5, etStaticDeque_get(&deque, 4)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d6, etStaticDeque_back(&deque)));
EXPECT_EQUAL_INT32(caseId, failMsg, 6, deque.size);
EXPECT_FALSE(caseId, failMsg, deque.size == 0);
// Test pop_back and pop_front
etStaticDeque_pop_back(&deque);
etStaticDeque_pop_front(&deque);
etStaticDeque_pop_front(&deque);
etStaticDeque_pop_back(&deque);
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d3, etStaticDeque_get(&deque, 0)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d4, etStaticDeque_get(&deque, 1)));
EXPECT_EQUAL_INT32(caseId, failMsg, 2, deque.size);
EXPECT_FALSE(caseId, failMsg, deque.size == 0);
// Test pushing after popping
etStaticDeque_push_front(&deque, &d2);
etStaticDeque_push_back(&deque, &d5);
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d2, etStaticDeque_front(&deque)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d3, etStaticDeque_get(&deque, 1)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d4, etStaticDeque_get(&deque, 2)));
EXPECT_TRUE(caseId, failMsg, compareDataClass(&d5, etStaticDeque_back(&deque)));
EXPECT_EQUAL_INT32(caseId, failMsg, 4, deque.size);
EXPECT_FALSE(caseId, failMsg, deque.size == 0);
// Test pop all objects
while(deque.size > 0) {
etStaticDeque_pop_front(&deque);
}
}
void TestEtStaticDeque_runSuite(void) {
etUnit_openTestSuite("org.eclipse.etrice.runtime.c.tests.TestEtStaticDeque");
ADD_TESTCASE(TestEtStaticDeque_testConstruct);
ADD_TESTCASE(TestEtStaticDeque_testPushPop);
etUnit_closeTestSuite();
}
|