@@ -60,11 +60,11 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
size_t i, j;
char *s1, *s2;
size_t repeats;
- align1 &= 63;
+ align1 &= (getpagesize () - 1);
if (align1 + len >= page_size)
return;
- align2 &= 63;
+ align2 &= (getpagesize () - 1);
if (align2 + len >= page_size)
return;
@@ -99,7 +99,7 @@ test_main (void)
{
json_ctx_t json_ctx;
size_t i;
-
+ size_t half_page = getpagesize () / 2;
test_init ();
json_init (&json_ctx, 0, stdout);
@@ -121,8 +121,15 @@ test_main (void)
{
do_test (&json_ctx, 0, 0, 1 << i, 1);
do_test (&json_ctx, i, 0, 1 << i, 1);
+ do_test (&json_ctx, i + 32, 0, 1 << i, 1);
do_test (&json_ctx, 0, i, 1 << i, 1);
+ do_test (&json_ctx, 0, i + 32, 1 << i, 1);
do_test (&json_ctx, i, i, 1 << i, 1);
+ do_test (&json_ctx, i + 32, i + 32, 1 << i, 1);
+ do_test (&json_ctx, half_page, 0, 1 << i, 1);
+ do_test (&json_ctx, half_page + i, 0, 1 << i, 1);
+ do_test (&json_ctx, half_page, i, 1 << i, 1);
+ do_test (&json_ctx, half_page + i, i, 1 << i, 1);
}
for (i = 0; i < 32; ++i)
@@ -131,6 +138,12 @@ test_main (void)
do_test (&json_ctx, i, 0, i, 0);
do_test (&json_ctx, 0, i, i, 0);
do_test (&json_ctx, i, i, i, 0);
+ do_test (&json_ctx, half_page, 0, i, 0);
+ do_test (&json_ctx, half_page + i, 0, i, 0);
+ do_test (&json_ctx, half_page, i, i, 0);
+ do_test (&json_ctx, half_page + i, i, i, 0);
+ do_test (&json_ctx, getpagesize () - 1, 0, i, 0);
+ do_test (&json_ctx, 0, getpagesize () - 1, i, 0);
}
for (i = 3; i < 32; ++i)
@@ -141,6 +154,10 @@ test_main (void)
do_test (&json_ctx, i, 0, 16 * i, 1);
do_test (&json_ctx, 0, i, 16 * i, 1);
do_test (&json_ctx, i, i, 16 * i, 1);
+ do_test (&json_ctx, half_page, 0, 16 * i, 1);
+ do_test (&json_ctx, half_page + i, 0, 16 * i, 1);
+ do_test (&json_ctx, half_page, i, 16 * i, 1);
+ do_test (&json_ctx, half_page + i, i, 16 * i, 1);
}
for (i = 32; i < 64; ++i)
@@ -149,16 +166,33 @@ test_main (void)
do_test (&json_ctx, i, 0, 32 * i, 1);
do_test (&json_ctx, 0, i, 32 * i, 1);
do_test (&json_ctx, i, i, 32 * i, 1);
+ do_test (&json_ctx, half_page, 0, 32 * i, 1);
+ do_test (&json_ctx, half_page + i, 0, 32 * i, 1);
+ do_test (&json_ctx, half_page, i, 32 * i, 1);
+ do_test (&json_ctx, half_page + i, i, 32 * i, 1);
}
do_test (&json_ctx, 0, 0, getpagesize (), 1);
- for (i = 0; i <= 32; ++i)
+ for (i = 0; i <= 48; ++i)
{
do_test (&json_ctx, 0, 0, 2048 + 64 * i, 1);
do_test (&json_ctx, i, 0, 2048 + 64 * i, 1);
+ do_test (&json_ctx, i + 32, 0, 2048 + 64 * i, 1);
do_test (&json_ctx, 0, i, 2048 + 64 * i, 1);
+ do_test (&json_ctx, 0, i + 32, 2048 + 64 * i, 1);
do_test (&json_ctx, i, i, 2048 + 64 * i, 1);
+ do_test (&json_ctx, i + 32, i + 32, 2048 + 64 * i, 1);
+ do_test (&json_ctx, half_page, 0, 2048 + 64 * i, 1);
+ do_test (&json_ctx, half_page + i, 0, 2048 + 64 * i, 1);
+ do_test (&json_ctx, half_page, i, 2048 + 64 * i, 1);
+ do_test (&json_ctx, half_page + i, i, 2048 + 64 * i, 1);
+ do_test (&json_ctx, i, 1, 2048 + 64 * i, 1);
+ do_test (&json_ctx, 1, i, 2048 + 64 * i, 1);
+ do_test (&json_ctx, i + 32, 1, 2048 + 64 * i, 1);
+ do_test (&json_ctx, 1, i + 32, 2048 + 64 * i, 1);
+ do_test (&json_ctx, half_page + i, 1, 2048 + 64 * i, 1);
+ do_test (&json_ctx, half_page + 1, i, 2048 + 64 * i, 1);
}
json_array_end (&json_ctx);
@@ -53,11 +53,11 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len)
size_t i, j;
char *s1, *s2;
- align1 &= 63;
+ align1 &= (getpagesize () - 1);
if (align1 + len >= page_size)
return;
- align2 &= 63;
+ align2 &= (getpagesize () - 1);
if (align2 + len >= page_size)
return;
@@ -85,6 +85,7 @@ test_main (void)
{
json_ctx_t json_ctx;
size_t i;
+ size_t half_page = getpagesize () / 2;
test_init ();
@@ -138,6 +139,22 @@ test_main (void)
do_test (&json_ctx, i, i, 32 * i);
}
+ for (i = 0; i <= 48; ++i)
+ {
+ do_test (&json_ctx, 0, 0, 2048 + 64 * i);
+ do_test (&json_ctx, i, 0, 2048 + 64 * i);
+ do_test (&json_ctx, 0, i, 2048 + 64 * i);
+ do_test (&json_ctx, i, i, 2048 + 64 * i);
+ do_test (&json_ctx, half_page, 0, 2048 + 64 * i);
+ do_test (&json_ctx, 0, half_page, 2048 + 64 * i);
+ do_test (&json_ctx, half_page + i, 0, 2048 + 64 * i);
+ do_test (&json_ctx, i, half_page, 2048 + 64 * i);
+ do_test (&json_ctx, half_page, i, 2048 + 64 * i);
+ do_test (&json_ctx, 0, half_page + i, 2048 + 64 * i);
+ do_test (&json_ctx, half_page + i, i, 2048 + 64 * i);
+ do_test (&json_ctx, i, half_page + i, 2048 + 64 * i);
+ }
+
json_array_end (&json_ctx);
json_attr_object_end (&json_ctx);
json_attr_object_end (&json_ctx);