@@ -46,3 +46,75 @@ TEST(test_string_array, boot_string_array) {
46
46
ret = rcutils_string_array_fini (&sa2);
47
47
ASSERT_EQ (RCUTILS_RET_OK, ret);
48
48
}
49
+
50
+ TEST (test_string_array, string_array_cmp) {
51
+ auto allocator = rcutils_get_default_allocator ();
52
+ rcutils_ret_t ret = RCUTILS_RET_OK;
53
+ int res = 0 ;
54
+
55
+ // Initialize some string arrays
56
+ rcutils_string_array_t sa0 = rcutils_get_zero_initialized_string_array ();
57
+ ret = rcutils_string_array_init (&sa0, 3 , &allocator);
58
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
59
+ sa0.data [0 ] = strdup (" foo" );
60
+ sa0.data [1 ] = strdup (" bar" );
61
+ sa0.data [2 ] = strdup (" baz" );
62
+
63
+ rcutils_string_array_t sa1 = rcutils_get_zero_initialized_string_array ();
64
+ ret = rcutils_string_array_init (&sa1, 3 , &allocator);
65
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
66
+ sa1.data [0 ] = strdup (" foo" );
67
+ sa1.data [1 ] = strdup (" bar" );
68
+ sa1.data [2 ] = strdup (" baz" );
69
+
70
+ rcutils_string_array_t sa2 = rcutils_get_zero_initialized_string_array ();
71
+ ret = rcutils_string_array_init (&sa2, 3 , &allocator);
72
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
73
+ sa2.data [0 ] = strdup (" foo" );
74
+ sa2.data [1 ] = strdup (" baz" );
75
+ sa2.data [2 ] = strdup (" bar" );
76
+
77
+ rcutils_string_array_t sa3 = rcutils_get_zero_initialized_string_array ();
78
+ ret = rcutils_string_array_init (&sa3, 2 , &allocator);
79
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
80
+ sa3.data [0 ] = strdup (" foo" );
81
+ sa3.data [1 ] = strdup (" bar" );
82
+
83
+ rcutils_string_array_t incomplete_string_array = rcutils_get_zero_initialized_string_array ();
84
+ ret = rcutils_string_array_init (&incomplete_string_array, 3 , &allocator);
85
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
86
+
87
+ // Test failure cases
88
+ EXPECT_EQ (RCUTILS_RET_INVALID_ARGUMENT, rcutils_string_array_cmp (NULL , &sa0, &res));
89
+ EXPECT_EQ (RCUTILS_RET_INVALID_ARGUMENT, rcutils_string_array_cmp (&sa0, NULL , &res));
90
+ EXPECT_EQ (RCUTILS_RET_INVALID_ARGUMENT, rcutils_string_array_cmp (&sa0, &sa1, NULL ));
91
+ EXPECT_EQ (RCUTILS_RET_ERROR, rcutils_string_array_cmp (&sa0, &incomplete_string_array, &res));
92
+
93
+ // Test success cases
94
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa0, &sa1, &res));
95
+ EXPECT_EQ (res, 0 );
96
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa1, &sa0, &res));
97
+ EXPECT_EQ (res, 0 );
98
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa0, &sa2, &res));
99
+ EXPECT_LT (res, 0 );
100
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa2, &sa0, &res));
101
+ EXPECT_GT (res, 0 );
102
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa0, &sa3, &res));
103
+ EXPECT_GT (res, 0 );
104
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa3, &sa0, &res));
105
+ EXPECT_LT (res, 0 );
106
+ // Test transitivity
107
+ EXPECT_EQ (RCUTILS_RET_OK, rcutils_string_array_cmp (&sa3, &sa2, &res));
108
+ EXPECT_LT (res, 0 );
109
+
110
+ ret = rcutils_string_array_fini (&sa0);
111
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
112
+ ret = rcutils_string_array_fini (&sa1);
113
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
114
+ ret = rcutils_string_array_fini (&sa2);
115
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
116
+ ret = rcutils_string_array_fini (&sa3);
117
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
118
+ ret = rcutils_string_array_fini (&incomplete_string_array);
119
+ ASSERT_EQ (RCUTILS_RET_OK, ret);
120
+ }
0 commit comments