Author: rhuijben
Date: Wed Jul 26 11:15:29 2017
New Revision: 1803032
URL: http://svn.apache.org/viewvc?rev=1803032&view=rev
Log:
Add another merge-range test exercising more bad edge cases where we
currently create inconsistent ranges.
* subversion/tests/libsvn_subr/mergeinfo-test.c
(test_rangelist_loop): New function.
(max_threads): Allow parallel execution.
(test_funcs): Add test_rangelist_loop.
Modified:
subversion/trunk/subversion/tests/libsvn_subr/mergeinfo-test.c
Modified: subversion/trunk/subversion/tests/libsvn_subr/mergeinfo-test.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=1803032&r1=1803031&r2=1803032&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/mergeinfo-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_subr/mergeinfo-test.c Wed Jul 26
11:15:29 2017
@@ -1770,10 +1770,96 @@ test_rangelist_merge_overlap(apr_pool_t
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_rangelist_loop(apr_pool_t *pool)
+{
+ apr_pool_t *iterpool = svn_pool_create(pool);
+ int x, y;
+
+ for (x = 0; x < 62; x++)
+ for (y = x + 1; y < 63; y++)
+ {
+ svn_rangelist_t *base_list;
+ svn_rangelist_t *change_list;
+ svn_merge_range_t *mrange;
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(svn_rangelist__parse(&base_list,
+ "2,4,7-9,12-15,18-20,"
+ "22*,25*,28-30*,33-35*,"
+ "38-40,43-45*,48-50,52-54,56-59*",
+ iterpool));
+
+ change_list = apr_array_make(iterpool, 1, sizeof(mrange));
+
+ mrange = apr_pcalloc(pool, sizeof(*mrange));
+ mrange->start = x;
+ mrange->end = y;
+ APR_ARRAY_PUSH(change_list, svn_merge_range_t *) = mrange;
+
+ {
+ svn_rangelist_t *bl = svn_rangelist_dup(base_list, iterpool);
+ svn_rangelist_t *cl = svn_rangelist_dup(change_list, iterpool);
+
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(bl));
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(cl));
+
+ SVN_ERR(svn_rangelist_merge2(bl, cl, iterpool, iterpool));
+
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(bl));
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(cl));
+
+ /* TODO: Verify result */
+ }
+
+ {
+ svn_rangelist_t *bl = svn_rangelist_dup(base_list, iterpool);
+ svn_rangelist_t *cl = svn_rangelist_dup(change_list, iterpool);
+
+ SVN_ERR(svn_rangelist_merge2(cl, bl, iterpool, iterpool));
+
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(bl));
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(cl));
+
+ /* TODO: Verify result */
+ }
+
+ mrange->inheritable = TRUE;
+
+ {
+ svn_rangelist_t *bl = svn_rangelist_dup(base_list, iterpool);
+ svn_rangelist_t *cl = svn_rangelist_dup(change_list, iterpool);
+
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(bl));
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(cl));
+
+ SVN_ERR(svn_rangelist_merge2(bl, cl, iterpool, iterpool));
+
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(bl));
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(cl));
+
+ /* TODO: Verify result */
+ }
+
+ {
+ svn_rangelist_t *bl = svn_rangelist_dup(base_list, iterpool);
+ svn_rangelist_t *cl = svn_rangelist_dup(change_list, iterpool);
+
+ SVN_ERR(svn_rangelist_merge2(cl, bl, iterpool, iterpool));
+
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(bl));
+ SVN_TEST_ASSERT(svn_rangelist__is_canonical(cl));
+
+ /* TODO: Verify result */
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
/* The test table. */
-static int max_threads = 1;
+static int max_threads = 4;
static struct svn_test_descriptor_t test_funcs[] =
{
@@ -1816,6 +1902,8 @@ static struct svn_test_descriptor_t test
"removal of prefix paths from catalog keys"),
SVN_TEST_XFAIL2(test_rangelist_merge_overlap,
"merge of rangelists with overlaps (issue 4686)"),
+ SVN_TEST_XFAIL2(test_rangelist_loop,
+ "test rangelist edgecases via loop"),
SVN_TEST_NULL
};