Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add calls for getting the total number of data recording groups and the data recording group pointer by its id number #1799

Merged
merged 3 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading