Skip to content

Commit 41281d0

Browse files
committed
Fix #982, Add test for object id inline functions
1 parent 706f0de commit 41281d0

File tree

3 files changed

+94
-17
lines changed

3 files changed

+94
-17
lines changed

src/os/shared/inc/os-shared-idmap.h

+17
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,23 @@ struct OS_common_record
4444
uint16 refcount;
4545
};
4646

47+
typedef enum
48+
{
49+
OS_TASK_BASE = 0,
50+
OS_QUEUE_BASE = OS_TASK_BASE + OS_MAX_TASKS,
51+
OS_BINSEM_BASE = OS_QUEUE_BASE + OS_MAX_QUEUES,
52+
OS_COUNTSEM_BASE = OS_BINSEM_BASE + OS_MAX_BIN_SEMAPHORES,
53+
OS_MUTEX_BASE = OS_COUNTSEM_BASE + OS_MAX_COUNT_SEMAPHORES,
54+
OS_STREAM_BASE = OS_MUTEX_BASE + OS_MAX_MUTEXES,
55+
OS_DIR_BASE = OS_STREAM_BASE + OS_MAX_NUM_OPEN_FILES,
56+
OS_TIMEBASE_BASE = OS_DIR_BASE + OS_MAX_NUM_OPEN_DIRS,
57+
OS_TIMECB_BASE = OS_TIMEBASE_BASE + OS_MAX_TIMEBASES,
58+
OS_MODULE_BASE = OS_TIMECB_BASE + OS_MAX_TIMERS,
59+
OS_FILESYS_BASE = OS_MODULE_BASE + OS_MAX_MODULES,
60+
OS_CONSOLE_BASE = OS_FILESYS_BASE + OS_MAX_FILE_SYSTEMS,
61+
OS_MAX_TOTAL_RECORDS = OS_CONSOLE_BASE + OS_MAX_CONSOLES
62+
} OS_ObjectIndex_t;
63+
4764
/*
4865
* Type of locking that should occur when checking IDs.
4966
*/

src/os/shared/src/osapi-idmap.c

-17
Original file line numberDiff line numberDiff line change
@@ -63,23 +63,6 @@
6363
#define OS_LOCK_KEY_FIXED_VALUE 0x4D000000
6464
#define OS_LOCK_KEY_INVALID ((osal_key_t) {0})
6565

66-
typedef enum
67-
{
68-
OS_TASK_BASE = 0,
69-
OS_QUEUE_BASE = OS_TASK_BASE + OS_MAX_TASKS,
70-
OS_BINSEM_BASE = OS_QUEUE_BASE + OS_MAX_QUEUES,
71-
OS_COUNTSEM_BASE = OS_BINSEM_BASE + OS_MAX_BIN_SEMAPHORES,
72-
OS_MUTEX_BASE = OS_COUNTSEM_BASE + OS_MAX_COUNT_SEMAPHORES,
73-
OS_STREAM_BASE = OS_MUTEX_BASE + OS_MAX_MUTEXES,
74-
OS_DIR_BASE = OS_STREAM_BASE + OS_MAX_NUM_OPEN_FILES,
75-
OS_TIMEBASE_BASE = OS_DIR_BASE + OS_MAX_NUM_OPEN_DIRS,
76-
OS_TIMECB_BASE = OS_TIMEBASE_BASE + OS_MAX_TIMEBASES,
77-
OS_MODULE_BASE = OS_TIMECB_BASE + OS_MAX_TIMERS,
78-
OS_FILESYS_BASE = OS_MODULE_BASE + OS_MAX_MODULES,
79-
OS_CONSOLE_BASE = OS_FILESYS_BASE + OS_MAX_FILE_SYSTEMS,
80-
OS_MAX_TOTAL_RECORDS = OS_CONSOLE_BASE + OS_MAX_CONSOLES
81-
} OS_ObjectIndex_t;
82-
8366
/*
8467
* A structure containing the user-specified
8568
* details of a "foreach" iteration request

src/unit-test-coverage/shared/src/coveragetest-idmap.c

+77
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131

3232
#include "OCS_string.h"
3333

34+
#define maxRecords \
35+
(OS_MAX_TASKS + OS_MAX_QUEUES + OS_MAX_BIN_SEMAPHORES + OS_MAX_COUNT_SEMAPHORES + OS_MAX_MUTEXES + \
36+
OS_MAX_NUM_OPEN_FILES + OS_MAX_NUM_OPEN_DIRS + OS_MAX_TIMEBASES + OS_MAX_TIMERS + OS_MAX_MODULES + \
37+
OS_MAX_FILE_SYSTEMS + OS_MAX_CONSOLES)
38+
3439
typedef struct
3540
{
3641
uint32 TaskCount;
@@ -1065,6 +1070,76 @@ void Test_OS_ObjectIdIterator(void)
10651070
UtAssert_STUB_COUNT(OS_Unlock_Global_Impl, 2);
10661071
}
10671072

1073+
void Test_OS_ObjectIDInteger(void)
1074+
{
1075+
/*
1076+
* Test Case For:
1077+
* OS_ObjectIdToInteger, OS_ObjectIdFromInteger, OS_ObjectIdEqual, OS_ObjectIdDefined
1078+
*/
1079+
int32 actual;
1080+
OS_object_token_t token;
1081+
osal_id_t typesI[OS_MAX_TOTAL_RECORDS];
1082+
osal_id_t typesJ[OS_MAX_TOTAL_RECORDS];
1083+
uint32 intID;
1084+
int32 recordscount = 0;
1085+
osal_objtype_t idtype;
1086+
char str[OS_MAX_TOTAL_RECORDS];
1087+
1088+
for (idtype = 0; idtype < OS_OBJECT_TYPE_USER; ++idtype)
1089+
{
1090+
actual = OS_SUCCESS;
1091+
do
1092+
{
1093+
snprintf(str, sizeof(str), "%d", recordscount);
1094+
1095+
actual = OS_ObjectIdAllocateNew(idtype, str, &token);
1096+
1097+
if (actual == OS_SUCCESS)
1098+
{
1099+
typesI[recordscount] = token.obj_id;
1100+
intID = OS_ObjectIdToInteger(typesI[recordscount]);
1101+
typesJ[recordscount] = OS_ObjectIdFromInteger(intID);
1102+
1103+
recordscount++;
1104+
}
1105+
1106+
} while (actual == OS_SUCCESS);
1107+
}
1108+
1109+
for (int i = 0; i < recordscount; i++)
1110+
{
1111+
UtAssert_True(OS_ObjectIdDefined(typesI[i]), "%lu Is defined", OS_ObjectIdToInteger(typesI[i]));
1112+
1113+
for (int j = 0; j < recordscount; j++)
1114+
{
1115+
if (i == j)
1116+
{
1117+
UtAssert_True(OS_ObjectIdEqual(typesI[i], typesJ[j]), "%lu equals %lu", OS_ObjectIdToInteger(typesI[i]),
1118+
OS_ObjectIdToInteger(typesJ[j]));
1119+
}
1120+
else
1121+
{
1122+
UtAssert_True(!OS_ObjectIdEqual(typesI[i], typesJ[j]), "%lu does not equal %lu",
1123+
OS_ObjectIdToInteger(typesI[i]), OS_ObjectIdToInteger(typesJ[j]));
1124+
}
1125+
}
1126+
}
1127+
}
1128+
1129+
void Test_OS_ObjectIDUndefined(void)
1130+
{
1131+
osal_id_t id;
1132+
uint32 intID;
1133+
1134+
UtAssert_True(!OS_ObjectIdDefined(OS_OBJECT_ID_UNDEFINED), "%lu Is undefined",
1135+
OS_ObjectIdToInteger(OS_OBJECT_ID_UNDEFINED));
1136+
1137+
intID = OS_ObjectIdToInteger(OS_OBJECT_ID_UNDEFINED);
1138+
id = OS_ObjectIdFromInteger(intID);
1139+
1140+
UtAssert_True(!OS_ObjectIdDefined(id), "%lu Is undefined", OS_ObjectIdToInteger(id));
1141+
}
1142+
10681143
/* Osapi_Test_Setup
10691144
*
10701145
* Purpose:
@@ -1115,4 +1190,6 @@ void UtTest_Setup(void)
11151190
ADD_TEST(OS_GetBaseForObjectType);
11161191
ADD_TEST(OS_GetResourceName);
11171192
ADD_TEST(OS_ObjectIdIterator);
1193+
ADD_TEST(OS_ObjectIDInteger);
1194+
ADD_TEST(OS_ObjectIDUndefined);
11181195
}

0 commit comments

Comments
 (0)