Skip to content

Commit

Permalink
Add calls for getting the total number of data recording groups and t…
Browse files Browse the repository at this point in the history
…he data recording group pointer by its id number (#1799)

* Added new function calls to data_record_utilities for getting the total number of data recording groups and the data recording group pointer by its id number per customer request.

* Deleted unnecessary variable.

* Added a couple of more unit tests and fixed the return number to 0 instead of NULL for getting total number of drgs.
  • Loading branch information
hchen99 authored Nov 12, 2024
1 parent 937712d commit e8508ea
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 7 deletions.
8 changes: 7 additions & 1 deletion include/trick/DataRecordDispatcher.hh
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,15 @@ namespace Trick {
/** @brief Removes all data recording groups. */
void remove_all_groups() ;

/** @brief Gets a data recording group. */
/** @brief Gets a data recording group by its name. */
Trick::DataRecordGroup * get_group(std::string group_name) ;

/** @brief Gets a data recording group by its id number */
Trick::DataRecordGroup * get_group(int idx) ;

/** @brief Gets the size of all added data recroding groups */
int get_groups_size() ;

/** @brief Signal the write thread to execute. */
virtual int signal_thread() ;

Expand Down
2 changes: 2 additions & 0 deletions include/trick/data_record_proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ int set_max_size_record_group (const char * in_name, uint64_t bytes ) ;
int add_data_record_group( Trick::DataRecordGroup * in_group, Trick::DR_Buffering buffering = Trick::DR_Not_Specified ) ;
int remove_data_record_group( Trick::DataRecordGroup * in_group ) ;
Trick::DataRecordGroup * get_data_record_group( std::string in_name ) ;
Trick::DataRecordGroup * get_data_record_group_by_idx( int idx ) ;
int get_num_data_record_groups() ;
}
#endif

Expand Down
61 changes: 55 additions & 6 deletions test/SIM_test_dr/RUN_test/unit_test.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,59 @@
exec(open("Modified_data/dr_typesASCII.dr").read())
exec(open("Modified_data/dr_typesBINARY.dr").read())
exec(open("Modified_data/dr_bitfASCII.dr").read())
exec(open("Modified_data/dr_bitfBINARY.dr").read())
from trick.unit_test import *

trick_utest.unit_tests.enable() ;
trick_utest.unit_tests.set_file_name( os.getenv("TRICK_HOME") + "/trick_test/SIM_test_dr.xml" ) ;
trick_utest.unit_tests.enable()
trick_utest.unit_tests.set_file_name( os.getenv("TRICK_HOME") + "/trick_test/SIM_test_dr.xml" )

trick_utest.unit_tests.set_test_name( "DRTest" )

######################################################################################################################

test_suite = "drg api"

# Get the number of data recording groups before any drg is created
num_drgs = trick.get_num_data_record_groups()

# Check the result of trick.get_num_data_record_groups()
TRICK_EXPECT_EQ( num_drgs , 0 , test_suite , "0 drgs before any created" )

# The first item of each pair is the .dr file name and the second item of each pair is the drg name
dr_file_name_drg_name_tuple = (('Modified_data/dr_typesASCII.dr', 'DR_typesASCII'),
('Modified_data/dr_typesBINARY.dr', 'DR_typesBINARY'),
('Modified_data/dr_bitfASCII.dr', 'DR_bitfieldsASCII'),
('Modified_data/dr_bitfBINARY.dr', 'DR_bitfieldsBINARY'))

num_files = len(dr_file_name_drg_name_tuple)
for i in range(num_files):
exec(open(dr_file_name_drg_name_tuple[i][0]).read())

# Get the number of data recording groups created
num_drgs = trick.get_num_data_record_groups()

# Check the result of trick.get_num_data_record_groups()
TRICK_EXPECT_EQ( num_drgs , 4 , test_suite , "num of dr groups = 4" )

# Test trick.get_data_record_group(<drg_name>) for getting the drg pointer by its name
# Check the name of the obtained drg instead of the drg pointer
for i in range(num_drgs):
TRICK_EXPECT_EQ( trick.get_data_record_group(dr_file_name_drg_name_tuple[i][1]).get_group_name(), dr_file_name_drg_name_tuple[i][1], test_suite , "get drg by name " + dr_file_name_drg_name_tuple[i][1] )

# Test trick.get_data_record_group_by_idx(<drg_idx) for getting the drg pointer by its id number
# Check the name of the obtained drg instead of the drg pointer
for i in range(num_drgs):
TRICK_EXPECT_EQ( trick.get_data_record_group_by_idx(i).get_group_name(), dr_file_name_drg_name_tuple[i][1], test_suite , "get drg by drg id " + str(i) )

is_null = False
if trick.get_data_record_group(dr_file_name_drg_name_tuple[0][1]+'test') is None :
is_null = True
TRICK_EXPECT_TRUE( is_null, test_suite , "null drg by nonexistent drg name" )

is_null = False
if trick.get_data_record_group_by_idx(num_drgs+1) is None :
is_null = True
TRICK_EXPECT_TRUE( is_null, test_suite , "null drg by drg id 5" )

is_null = False
if trick.get_data_record_group_by_idx(-1) is None :
is_null = True
TRICK_EXPECT_TRUE( is_null, test_suite , "null drg by drg id -1" )

trick.stop(1.0)
23 changes: 23 additions & 0 deletions trick_source/sim_services/DataRecord/DataRecordDispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,10 @@ void Trick::DataRecordDispatcher::remove_all_groups() {
}
}

/**
@details
-# Gets the data recording group by its name
*/
Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(std::string in_name) {
std::vector <Trick::DataRecordGroup *>::iterator it ;
for ( it = groups.begin() ; it != groups.end() ; ++it ) {
Expand All @@ -189,6 +193,25 @@ Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(std::string in_n
return NULL ;
}

/**
@details
-# Gets the data recording group by its id number
*/
Trick::DataRecordGroup * Trick::DataRecordDispatcher::get_group(int in_idx) {
if (!groups.empty() && in_idx > -1 && in_idx < groups.size()) {
return groups[in_idx];
}
return NULL ;
}

/**
@details
-# Gets the size of all added data recroding groups
*/
int Trick::DataRecordDispatcher::get_groups_size() {
return groups.size();
}

/**
@details
-# If the writer thread condition variable is unlocked
Expand Down
14 changes: 14 additions & 0 deletions trick_source/sim_services/DataRecord/data_record_utilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,20 @@ extern "C" Trick::DataRecordGroup * get_data_record_group( std::string in_name )
return NULL ;
}

extern "C" Trick::DataRecordGroup * get_data_record_group_by_idx( int in_idx ) {
if ( the_drd != NULL ) {
return the_drd->get_group(in_idx) ;
}
return NULL ;
}

extern "C" int get_num_data_record_groups() {
if ( the_drd != NULL ) {
return the_drd->get_groups_size() ;
}
return 0 ;
}

extern "C" int set_max_size_record_group (const char * in_name, uint64_t bytes ) {
if ( the_drd != NULL ) {
return the_drd->set_group_max_file_size(in_name, bytes ) ;
Expand Down

0 comments on commit e8508ea

Please sign in to comment.