/** * Match pattern and str. Pattern is in format UPPERCASElowercase * @param pattern * @param pattern_len * @param str * @param str_len * @return */ scpi_bool_t matchPattern(const char * pattern, size_t pattern_len, const char * str, size_t str_len, int32_t * num) { int pattern_sep_pos_short; if (pattern[pattern_len - 1] == '#') { size_t new_pattern_len = pattern_len - 1; pattern_sep_pos_short = patternSeparatorShortPos(pattern, new_pattern_len); return compareStrAndNum(pattern, new_pattern_len, str, str_len, num) || compareStrAndNum(pattern, pattern_sep_pos_short, str, str_len, num); } else { pattern_sep_pos_short = patternSeparatorShortPos(pattern, pattern_len); return compareStr(pattern, pattern_len, str, str_len) || compareStr(pattern, pattern_sep_pos_short, str, str_len); } }
static void test_compareStrAndNum() { int32_t num; CU_ASSERT_TRUE(compareStrAndNum("abcd", 1, "afgh", 1, NULL)); CU_ASSERT_TRUE(compareStrAndNum("ABCD", 4, "abcd", 4, NULL)); CU_ASSERT_TRUE(compareStrAndNum("AbCd", 3, "AbCE", 3, NULL)); CU_ASSERT_TRUE(compareStrAndNum("ABCD", 1, "a", 1, NULL)); CU_ASSERT_FALSE(compareStrAndNum("abcd", 1, "efgh", 1, NULL)); CU_ASSERT_FALSE(compareStrAndNum("ABCD", 4, "abcd", 3, NULL)); CU_ASSERT_TRUE(compareStrAndNum("abcd", 4, "abcd1", 5, NULL)); CU_ASSERT_TRUE(compareStrAndNum("abcd", 4, "abcd123", 7, NULL)); CU_ASSERT_FALSE(compareStrAndNum("abcd", 4, "abcd12A", 7, NULL)); CU_ASSERT_FALSE(compareStrAndNum("abcd", 4, "abcdB12", 7, NULL)); CU_ASSERT_FALSE(compareStrAndNum("abdd", 4, "abcd132", 7, NULL)); #define TEST_COMPARE_STR_AND_NUM(s1, l1, s2, l2, v, r) \ do { \ num = -1; \ CU_ASSERT_EQUAL(compareStrAndNum(s1, l1, s2, l2, &num),r); \ CU_ASSERT_EQUAL(num, v); \ } while(0); \ TEST_COMPARE_STR_AND_NUM("abcd", 4, "abcd", 4, -1, TRUE); TEST_COMPARE_STR_AND_NUM("abcd", 4, "abcd1", 5, 1, TRUE); TEST_COMPARE_STR_AND_NUM("abcd", 4, "abcd123", 7, 123, TRUE); TEST_COMPARE_STR_AND_NUM("abcd", 4, "abcd12A", 7, -1, FALSE); TEST_COMPARE_STR_AND_NUM("abcd", 4, "abcdB12", 7, -1, FALSE); TEST_COMPARE_STR_AND_NUM("abdd", 4, "abcd132", 7, -1, FALSE); }