From dc5e5f44485b8f9709da767f79595d2fa8aff74d Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 16 Mar 2015 13:52:19 +0100 Subject: tmtests/tmfine01: New test --- testsuites/tmtests/Makefile.am | 1 + testsuites/tmtests/configure.ac | 1 + testsuites/tmtests/tmfine01/Makefile.am | 19 + testsuites/tmtests/tmfine01/init.c | 478 +++++++ testsuites/tmtests/tmfine01/tmfine01.doc | 21 + testsuites/tmtests/tmfine01/tmfine01.scn | 2092 ++++++++++++++++++++++++++++++ 6 files changed, 2612 insertions(+) create mode 100644 testsuites/tmtests/tmfine01/Makefile.am create mode 100644 testsuites/tmtests/tmfine01/init.c create mode 100644 testsuites/tmtests/tmfine01/tmfine01.doc create mode 100644 testsuites/tmtests/tmfine01/tmfine01.scn diff --git a/testsuites/tmtests/Makefile.am b/testsuites/tmtests/Makefile.am index bab9e806bb..c1eb7b5555 100644 --- a/testsuites/tmtests/Makefile.am +++ b/testsuites/tmtests/Makefile.am @@ -4,6 +4,7 @@ _SUBDIRS = tmck tmoverhd tm01 tm02 tm03 tm04 tm05 tm06 tm07 tm08 tm09 tm10 \ tm11 tm12 tm13 tm14 tm15 tm16 tm17 tm18 tm19 tm20 tm21 tm22 tm23 tm24 \ tm25 tm26 tm27 tm28 tm29 tm30 tm31 tm32 tm33 tm34 tm35 tm36 _SUBDIRS += tmcontext01 +_SUBDIRS += tmfine01 include $(top_srcdir)/../automake/test-subdirs.am include $(top_srcdir)/../automake/local.am diff --git a/testsuites/tmtests/configure.ac b/testsuites/tmtests/configure.ac index 3b33445d4f..5c6138e846 100644 --- a/testsuites/tmtests/configure.ac +++ b/testsuites/tmtests/configure.ac @@ -27,6 +27,7 @@ AC_SUBST(OPERATION_COUNT) # Explicitly list all Makefiles here AC_CONFIG_FILES([Makefile +tmfine01/Makefile tmcontext01/Makefile tmck/Makefile tmoverhd/Makefile diff --git a/testsuites/tmtests/tmfine01/Makefile.am b/testsuites/tmtests/tmfine01/Makefile.am new file mode 100644 index 0000000000..d6db7c8e20 --- /dev/null +++ b/testsuites/tmtests/tmfine01/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = tmfine01 +tmfine01_SOURCES = init.c + +dist_rtems_tests_DATA = tmfine01.scn tmfine01.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(tmfine01_OBJECTS) +LINK_LIBS = $(tmfine01_LDLIBS) + +tmfine01$(EXEEXT): $(tmfine01_OBJECTS) $(tmfine01_DEPENDENCIES) + @rm -f tmfine01$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/tmtests/tmfine01/init.c b/testsuites/tmtests/tmfine01/init.c new file mode 100644 index 0000000000..ed5f42992c --- /dev/null +++ b/testsuites/tmtests/tmfine01/init.c @@ -0,0 +1,478 @@ +/* + * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include "tmacros.h" + +#include +#include + +#include + +const char rtems_test_name[] = "TMFINE 1"; + +#define CPU_COUNT 32 + +#define MSG_COUNT 3 + +typedef struct { + uint32_t value; +} test_msg; + +typedef struct { + rtems_test_parallel_context base; + rtems_id master; + rtems_id sema[CPU_COUNT]; + rtems_id mq[CPU_COUNT]; + uint32_t self_event_ops[CPU_COUNT][CPU_COUNT]; + uint32_t all_to_one_event_ops[CPU_COUNT][CPU_COUNT]; + uint32_t one_mutex_ops[CPU_COUNT][CPU_COUNT]; + uint32_t many_mutex_ops[CPU_COUNT][CPU_COUNT]; + uint32_t self_msg_ops[CPU_COUNT][CPU_COUNT]; + uint32_t many_to_one_msg_ops[CPU_COUNT][CPU_COUNT]; +} test_context; + +static test_context test_instance; + +static rtems_interval test_duration(void) +{ + return rtems_clock_get_ticks_per_second(); +} + +static rtems_interval test_init( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + return test_duration(); +} + +static void test_fini( + const char *name, + uint32_t *counters, + size_t active_workers +) +{ + size_t i; + + printf(" <%s activeWorker=\"%zu\">\n", name, active_workers); + + for (i = 0; i < active_workers; ++i) { + printf( + " %" PRIu32 "\n", + i, + counters[i] + ); + } + + printf(" \n", name); +} + +static void test_self_event_body( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers, + size_t worker_index +) +{ + test_context *ctx = (test_context *) base; + rtems_id id = rtems_task_self(); + uint32_t counter = 0; + + while (!rtems_test_parallel_stop_job(&ctx->base)) { + rtems_status_code sc; + rtems_event_set out; + + ++counter; + + sc = rtems_event_send(id, RTEMS_EVENT_0); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_event_receive( + RTEMS_EVENT_0, + RTEMS_WAIT | RTEMS_EVENT_ANY, + RTEMS_NO_TIMEOUT, + &out + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + ctx->self_event_ops[active_workers - 1][worker_index] = counter; +} + +static void test_self_event_fini( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + test_context *ctx = (test_context *) base; + + test_fini( + "SelfEvent", + &ctx->self_event_ops[active_workers - 1][0], + active_workers + ); +} + +static void test_all_to_one_event_body( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers, + size_t worker_index +) +{ + test_context *ctx = (test_context *) base; + rtems_id id = rtems_task_self(); + bool is_master = rtems_test_parallel_is_master_worker(worker_index); + uint32_t counter = 0; + + while (!rtems_test_parallel_stop_job(&ctx->base)) { + rtems_status_code sc; + + ++counter; + + sc = rtems_event_send(id, RTEMS_EVENT_0); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + if (is_master) { + rtems_event_set out; + + sc = rtems_event_receive( + RTEMS_ALL_EVENTS, + RTEMS_WAIT | RTEMS_EVENT_ANY, + RTEMS_NO_TIMEOUT, + &out + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + } + + ctx->all_to_one_event_ops[active_workers - 1][worker_index] = counter; +} + +static void test_all_to_one_event_fini( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + test_context *ctx = (test_context *) base; + + test_fini( + "AllToOneEvent", + &ctx->all_to_one_event_ops[active_workers - 1][0], + active_workers + ); +} + +static void test_one_mutex_body( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers, + size_t worker_index +) +{ + test_context *ctx = (test_context *) base; + rtems_id id = ctx->sema[0]; + uint32_t counter = 0; + + while (!rtems_test_parallel_stop_job(&ctx->base)) { + rtems_status_code sc; + + ++counter; + + sc = rtems_semaphore_obtain(id, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_semaphore_release(id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + ctx->one_mutex_ops[active_workers - 1][worker_index] = counter; +} + +static void test_one_mutex_fini( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + test_context *ctx = (test_context *) base; + + test_fini( + "OneMutex", + &ctx->one_mutex_ops[active_workers - 1][0], + active_workers + ); +} + +static void test_many_mutex_body( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers, + size_t worker_index +) +{ + test_context *ctx = (test_context *) base; + rtems_id id = ctx->sema[worker_index]; + uint32_t counter = 0; + + while (!rtems_test_parallel_stop_job(&ctx->base)) { + rtems_status_code sc; + + ++counter; + + sc = rtems_semaphore_obtain(id, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_semaphore_release(id); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + ctx->many_mutex_ops[active_workers - 1][worker_index] = counter; +} + +static void test_many_mutex_fini( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + test_context *ctx = (test_context *) base; + + test_fini( + "ManyMutex", + &ctx->many_mutex_ops[active_workers - 1][0], + active_workers + ); +} + +static void test_self_msg_body( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers, + size_t worker_index +) +{ + test_context *ctx = (test_context *) base; + rtems_id id = ctx->mq[worker_index]; + uint32_t counter = 0; + + while (!rtems_test_parallel_stop_job(&ctx->base)) { + rtems_status_code sc; + test_msg msg = { .value = 0 }; + size_t n; + + ++counter; + + sc = rtems_message_queue_send(id, &msg, sizeof(msg)); + rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TOO_MANY); + + n = sizeof(msg); + sc = rtems_message_queue_receive( + id, + &msg, + &n, + RTEMS_WAIT, + RTEMS_NO_TIMEOUT + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(n == sizeof(msg)); + } + + ctx->self_msg_ops[active_workers - 1][worker_index] = counter; +} + +static void test_self_msg_fini( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + test_context *ctx = (test_context *) base; + + test_fini( + "SelfMsg", + &ctx->self_msg_ops[active_workers - 1][0], + active_workers + ); +} + +static void test_many_to_one_msg_body( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers, + size_t worker_index +) +{ + test_context *ctx = (test_context *) base; + rtems_id id = ctx->mq[0]; + bool is_master = rtems_test_parallel_is_master_worker(worker_index); + uint32_t counter = 0; + + while (!rtems_test_parallel_stop_job(&ctx->base)) { + rtems_status_code sc; + test_msg msg = { .value = 0 }; + size_t n; + + ++counter; + + sc = rtems_message_queue_send(id, &msg, sizeof(msg)); + rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TOO_MANY); + + if (is_master) { + n = sizeof(msg); + sc = rtems_message_queue_receive( + id, + &msg, + &n, + RTEMS_WAIT, + RTEMS_NO_TIMEOUT + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_test_assert(n == sizeof(msg)); + } + } + + ctx->many_to_one_msg_ops[active_workers - 1][worker_index] = counter; +} + +static void test_many_to_one_msg_fini( + rtems_test_parallel_context *base, + void *arg, + size_t active_workers +) +{ + test_context *ctx = (test_context *) base; + + test_fini( + "ManyToOneMsg", + &ctx->many_to_one_msg_ops[active_workers - 1][0], + active_workers + ); +} + +static const rtems_test_parallel_job test_jobs[] = { + { + .init = test_init, + .body = test_self_event_body, + .fini = test_self_event_fini, + .cascade = true + }, { + .init = test_init, + .body = test_all_to_one_event_body, + .fini = test_all_to_one_event_fini, + .cascade = true + }, { + .init = test_init, + .body = test_one_mutex_body, + .fini = test_one_mutex_fini, + .cascade = true + }, { + .init = test_init, + .body = test_many_mutex_body, + .fini = test_many_mutex_fini, + .cascade = true + }, { + .init = test_init, + .body = test_self_msg_body, + .fini = test_self_msg_fini, + .cascade = true + }, { + .init = test_init, + .body = test_many_to_one_msg_body, + .fini = test_many_to_one_msg_fini, + .cascade = true + } +}; + +static void Init(rtems_task_argument arg) +{ + test_context *ctx = &test_instance; + const char *test = "TestTimeFine01"; + size_t i; + + TEST_BEGIN(); + + ctx->master = rtems_task_self(); + + for (i = 0; i < CPU_COUNT; ++i) { + rtems_status_code sc; + + sc = rtems_semaphore_create( + rtems_build_name('T', 'E', 'S', 'T'), + 1, + RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, + 0, + &ctx->sema[i] + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_message_queue_create( + rtems_build_name('T', 'E', 'S', 'T'), + MSG_COUNT, + sizeof(test_msg), + RTEMS_DEFAULT_ATTRIBUTES, + &ctx->mq[i] + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + } + + printf("<%s>\n", test); + + rtems_test_parallel( + &ctx->base, + 1, + &test_jobs[0], + RTEMS_ARRAY_SIZE(test_jobs) + ); + + printf("\n", test); + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM + +#define CONFIGURE_MAXIMUM_TASKS CPU_COUNT + +#define CONFIGURE_MAXIMUM_TIMERS 1 + +#define CONFIGURE_MAXIMUM_SEMAPHORES CPU_COUNT + +#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES CPU_COUNT + +#define CONFIGURE_MESSAGE_BUFFER_MEMORY \ + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MSG_COUNT, sizeof(test_msg)) + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_SMP_APPLICATION + +#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT + +#define CONFIGURE_INIT + +#include diff --git a/testsuites/tmtests/tmfine01/tmfine01.doc b/testsuites/tmtests/tmfine01/tmfine01.doc new file mode 100644 index 0000000000..1bf39c6803 --- /dev/null +++ b/testsuites/tmtests/tmfine01/tmfine01.doc @@ -0,0 +1,21 @@ +This file describes the directives and concepts tested by this test set. + +test set name: tmfine01 + +directives: + + - rtems_event_send() + - rtems_event_receive() + - rtems_semaphore_obtain() + - rtems_semaphore_release() + - rtems_message_queue_send() + - rtems_message_queue_receive() + +concepts: + + - Count event send and receive operations to self. + - Count event send and receive operations from all tasks to one. + - Count mutex obtain and release operations with a private mutex. + - Count mutex obtain and release operations with a global mutex. + - Count message send and receive operations with a private message queue. + - Count message send and receive operations with a global message queue. diff --git a/testsuites/tmtests/tmfine01/tmfine01.scn b/testsuites/tmtests/tmfine01/tmfine01.scn new file mode 100644 index 0000000000..5b7ddba671 --- /dev/null +++ b/testsuites/tmtests/tmfine01/tmfine01.scn @@ -0,0 +1,2092 @@ +*** BEGIN OF TEST TMFINE 1 *** + + + 2439242 + + + 2434919 + 2428545 + + + 2450125 + 2397577 + 3396553 + + + 2440893 + 2377334 + 3356199 + 2412298 + + + 2431918 + 2361036 + 3307873 + 2361111 + 3308071 + + + 2447343 + 2358781 + 3312263 + 2364497 + 3323441 + 2393829 + + + 2438184 + 2341618 + 3284048 + 2344390 + 3289008 + 2341336 + 3287729 + + + 2429033 + 2317275 + 3250911 + 2322296 + 3258434 + 2316913 + 3256091 + 2345590 + + + 2444659 + 2316064 + 3249718 + 2321055 + 3255668 + 2314191 + 3253259 + 2294458 + 3261977 + + + 2435503 + 2307485 + 3237568 + 2312408 + 3243512 + 2305652 + 3241019 + 2286440 + 3248786 + 3458482 + + + 2450590 + 2321791 + 3257786 + 2326880 + 3263812 + 2320008 + 3261324 + 2300522 + 3269161 + 3359031 + 2399300 + + + 2441277 + 2312997 + 3245449 + 2318044 + 3251478 + 2311239 + 3248935 + 2291697 + 3256744 + 3356755 + 2376798 + 2410036 + + + 2432106 + 2304202 + 3233069 + 2309208 + 3239016 + 2302445 + 3236547 + 2283302 + 3244262 + 3315548 + 2361237 + 2361293 + 3315613 + + + 2447142 + 2318609 + 3253297 + 2323619 + 3259235 + 2316796 + 3256791 + 2297409 + 3264655 + 3321434 + 2357135 + 2365225 + 3328122 + 2394746 + + + 2437900 + 2309745 + 3240816 + 2314700 + 3246815 + 2307939 + 3244335 + 2288528 + 3252163 + 3289024 + 2340349 + 2344734 + 3292260 + 2342291 + 3289734 + + + 2452934 + 2324127 + 3261061 + 2329185 + 3267123 + 2322273 + 3264567 + 2302818 + 3272466 + 3292144 + 2339664 + 2347345 + 3296732 + 2343270 + 3291900 + 2369297 + + + 2443837 + 2315316 + 3248712 + 2320304 + 3254608 + 2313449 + 3252138 + 2294058 + 3259930 + 3257466 + 2313585 + 2323428 + 3262292 + 2318016 + 3256271 + 2294261 + 3263853 + + + 2409157 + 2306402 + 3236233 + 2311467 + 3242224 + 2304599 + 3239755 + 2285337 + 3247547 + 3245036 + 2304780 + 2314538 + 3249851 + 2309182 + 3243840 + 2285742 + 3250366 + 3418604 + + + 2416041 + 2320825 + 3256450 + 2325923 + 3262472 + 2319042 + 3259985 + 2299561 + 3267789 + 3265334 + 2319171 + 2329005 + 3270136 + 2323666 + 3264217 + 2300027 + 3270762 + 3357941 + 2387118 + + + 2397524 + 2312138 + 3244108 + 2317105 + 3250112 + 2310293 + 3247627 + 2290992 + 3255397 + 3252906 + 2310305 + 2320096 + 3257660 + 2314735 + 3251716 + 2291237 + 3258287 + 3313158 + 2359786 + 3389669 + + + 2382159 + 2303120 + 3231640 + 2308207 + 3237659 + 2301352 + 3235144 + 2282053 + 3243009 + 3240435 + 2301457 + 2311253 + 3245235 + 2305890 + 3239180 + 2282503 + 3245865 + 3290485 + 2344582 + 3306875 + 2351956 + + + 2386032 + 2317614 + 3251822 + 2322596 + 3257901 + 2315748 + 3255336 + 2296302 + 3263171 + 3260758 + 2315888 + 2325681 + 3265516 + 2320325 + 3259551 + 2296755 + 3266120 + 3295460 + 2348363 + 3310445 + 2357213 + 2385562 + + + 2373352 + 2308745 + 3239474 + 2313746 + 3245461 + 2306904 + 3242982 + 2287602 + 3250752 + 3248257 + 2307030 + 2316845 + 3253073 + 2311491 + 3247144 + 2288045 + 3253659 + 3263347 + 2325333 + 3275731 + 2333369 + 2326288 + 3272382 + + + 2323859 + 2323201 + 3259747 + 2328242 + 3265771 + 2321389 + 3263306 + 2301985 + 3271074 + 3268539 + 2321391 + 2331282 + 3273360 + 2325840 + 3267364 + 2302301 + 3273913 + 3261834 + 2324542 + 3272797 + 2333061 + 2325351 + 3268567 + 3251123 + + + 2454533 + + + 2444811 + 4552873 + + + 2460307 + 4507332 + 6760988 + + + 2451147 + 4433793 + 6650657 + 4545259 + + + 2441987 + 4415771 + 6623623 + 4415780 + 6623658 + + + 2457480 + 4407822 + 6601288 + 4445059 + 6621304 + 4505768 + + + 2448321 + 4384898 + 6577307 + 4384946 + 6577337 + 4384911 + 6577325 + + + 2463815 + 4384322 + 6565540 + 4418699 + 6570694 + 4396540 + 6567240 + 4514109 + + + 2454656 + 4348009 + 6511819 + 4374045 + 6516807 + 4355367 + 6514422 + 4369454 + 6534723 + + + 2445495 + 4328315 + 6482921 + 4352713 + 6487549 + 4335161 + 6485361 + 4348465 + 6504463 + 6819950 + + + 2460777 + 4358233 + 6527017 + 4384463 + 6532106 + 4365550 + 6529694 + 4379858 + 6550361 + 6791315 + 4527544 + + + 2451404 + 4341849 + 6501980 + 4369411 + 6507350 + 4349638 + 6504765 + 4364608 + 6526412 + 6691273 + 4483754 + 4552494 + + + 2442031 + 4326090 + 6478850 + 4352240 + 6483895 + 4333420 + 6481469 + 4347640 + 6502080 + 6719141 + 4479428 + 4479428 + 6719141 + + + 2457312 + 4352627 + 6519559 + 4376461 + 6524101 + 4359256 + 6521934 + 4372278 + 6540614 + 6683030 + 4455366 + 4455652 + 6683031 + 4534077 + + + 2447939 + 4333877 + 6489118 + 4363954 + 6494879 + 4342317 + 6492087 + 4358695 + 6515611 + 6615018 + 4410393 + 4410444 + 6615016 + 4410423 + 6614984 + + + 2463222 + 4363525 + 6535251 + 4389418 + 6540174 + 4370981 + 6537738 + 4385013 + 6558191 + 6588573 + 4399067 + 4421972 + 6588053 + 4411668 + 6582777 + 4515107 + + + 2453848 + 4343934 + 6505808 + 4369707 + 6510743 + 4351080 + 6508369 + 4365115 + 6528482 + 6528862 + 4356889 + 4376602 + 6529029 + 4365554 + 6524137 + 4369231 + 6542861 + + + 2421443 + 4328535 + 6481702 + 4356938 + 6487085 + 4336409 + 6484605 + 4352010 + 6506871 + 6498147 + 4336495 + 4356442 + 6498231 + 4344773 + 6493245 + 4348686 + 6512134 + 6687799 + + + 2428619 + 4356962 + 6525063 + 4383909 + 6530188 + 4364556 + 6527676 + 4379213 + 6548822 + 6542632 + 4366308 + 4386618 + 6542801 + 4375268 + 6537689 + 4379181 + 6557332 + 6663166 + 4483588 + + + 2406497 + 4340777 + 6501420 + 4365949 + 6506171 + 4347833 + 6503901 + 4361577 + 6523566 + 6516097 + 4348884 + 4369373 + 6516159 + 4357829 + 6510740 + 4362344 + 6531485 + 6575572 + 4440014 + 6671160 + + + 2390337 + 4323904 + 6476839 + 4347469 + 6481304 + 4330591 + 6479190 + 4343364 + 6497530 + 6489940 + 4330917 + 4351330 + 6490091 + 4339113 + 6485146 + 4343160 + 6503769 + 6544710 + 4414827 + 6574011 + 4403777 + + + 2399062 + 4346952 + 6508913 + 4376254 + 6514560 + 4355180 + 6511780 + 4371180 + 6534868 + 6528481 + 4357422 + 4379598 + 6528626 + 4367163 + 6522834 + 4371805 + 6544829 + 6543628 + 4423522 + 6578029 + 4418140 + 4505424 + + + 2382328 + 4335389 + 6492930 + 4361291 + 6497810 + 4342612 + 6495487 + 4356737 + 6515827 + 6508992 + 4343865 + 4363858 + 6509110 + 4352577 + 6504023 + 4356579 + 6523460 + 6502686 + 4385227 + 6525071 + 4386893 + 4373769 + 6529708 + + + 2337982 + 4361693 + 6532266 + 4387923 + 6537304 + 4369045 + 6534895 + 4383412 + 6555458 + 6547905 + 4370216 + 4391920 + 6548153 + 4379701 + 6542495 + 4384243 + 6563887 + 6497934 + 4387133 + 6521694 + 4393725 + 4372412 + 6525964 + 6514246 + + + 1256086 + + + 85533 + 85532 + + + 49886 + 49885 + 49886 + + + 50144 + 50143 + 50144 + 50143 + + + 27277 + 27276 + 27276 + 27276 + 27276 + + + 31921 + 31921 + 31921 + 31921 + 31921 + 31920 + + + 19712 + 19711 + 19711 + 19712 + 19711 + 19711 + 19711 + + + 23882 + 23882 + 23881 + 23882 + 23881 + 23882 + 23882 + 23881 + + + 17988 + 17988 + 17988 + 17988 + 17988 + 17988 + 17988 + 17988 + 17988 + + + 33393 + 33393 + 33393 + 33393 + 33393 + 33393 + 33392 + 33392 + 33393 + 33392 + + + 12919 + 12918 + 12919 + 12919 + 12919 + 12919 + 12919 + 12918 + 12918 + 12918 + 12918 + + + 8607 + 8607 + 8607 + 8606 + 8606 + 8606 + 8606 + 8606 + 8606 + 8607 + 8606 + 8606 + + + 7535 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + 7534 + + + 10989 + 10988 + 10988 + 10988 + 10989 + 10988 + 10988 + 10989 + 10988 + 10988 + 10988 + 10988 + 10988 + 10988 + + + 10978 + 10977 + 10977 + 10977 + 10978 + 10977 + 10977 + 10977 + 10978 + 10978 + 10977 + 10978 + 10977 + 10977 + 10977 + + + 14934 + 14934 + 14934 + 14934 + 14934 + 14934 + 14933 + 14934 + 14934 + 14933 + 14934 + 14934 + 14934 + 14934 + 14933 + 14933 + + + 8474 + 8473 + 8474 + 8473 + 8473 + 8473 + 8473 + 8473 + 8473 + 8473 + 8474 + 8474 + 8474 + 8473 + 8473 + 8474 + 8473 + + + 6772 + 6771 + 6772 + 6772 + 6772 + 6771 + 6772 + 6771 + 6772 + 6771 + 6771 + 6772 + 6771 + 6771 + 6771 + 6771 + 6771 + 6772 + + + 6668 + 6668 + 6667 + 6668 + 6668 + 6668 + 6668 + 6667 + 6668 + 6667 + 6667 + 6668 + 6668 + 6668 + 6668 + 6668 + 6667 + 6668 + 6668 + + + 6207 + 6207 + 6207 + 6207 + 6207 + 6207 + 6207 + 6206 + 6207 + 6206 + 6206 + 6206 + 6207 + 6207 + 6207 + 6207 + 6207 + 6207 + 6207 + 6207 + + + 6608 + 6608 + 6607 + 6608 + 6607 + 6607 + 6608 + 6608 + 6608 + 6607 + 6608 + 6607 + 6607 + 6607 + 6607 + 6608 + 6607 + 6607 + 6608 + 6607 + 6608 + + + 5605 + 5605 + 5604 + 5604 + 5605 + 5604 + 5604 + 5604 + 5604 + 5605 + 5605 + 5605 + 5605 + 5604 + 5604 + 5604 + 5605 + 5604 + 5605 + 5604 + 5604 + 5605 + + + 5350 + 5349 + 5349 + 5349 + 5349 + 5349 + 5350 + 5350 + 5350 + 5349 + 5349 + 5350 + 5350 + 5350 + 5349 + 5349 + 5349 + 5350 + 5349 + 5350 + 5349 + 5350 + 5350 + + + 5239 + 5238 + 5238 + 5238 + 5238 + 5238 + 5239 + 5238 + 5238 + 5239 + 5239 + 5238 + 5239 + 5238 + 5239 + 5239 + 5238 + 5239 + 5238 + 5239 + 5239 + 5238 + 5238 + 5239 + + + 1252186 + + + 794471 + 794470 + + + 373449 + 373449 + 373448 + + + 267544 + 267543 + 267543 + 267543 + + + 231364 + 231364 + 231364 + 231363 + 231363 + + + 217729 + 217729 + 217729 + 217729 + 217729 + 217729 + + + 167547 + 167546 + 167546 + 167546 + 167546 + 167546 + 167546 + + + 150469 + 150469 + 150469 + 150469 + 150469 + 150469 + 150469 + 150469 + + + 148384 + 148384 + 148384 + 148384 + 148384 + 148384 + 148384 + 148384 + 148384 + + + 129580 + 129580 + 129580 + 129580 + 129580 + 129580 + 129580 + 129580 + 129580 + 129580 + + + 112589 + 112588 + 112588 + 112588 + 112588 + 112588 + 112588 + 112588 + 112588 + 112588 + 112588 + + + 100292 + 100292 + 100291 + 100291 + 100291 + 100291 + 100291 + 100291 + 100291 + 100291 + 100291 + 100292 + + + 95066 + 95066 + 95065 + 95065 + 95065 + 95065 + 95065 + 95065 + 95065 + 95065 + 95065 + 95065 + 95065 + + + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + 94011 + + + 89413 + 89413 + 89412 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + 89413 + + + 89056 + 89056 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89055 + 89054 + + + 82979 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82978 + 82975 + 82978 + + + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77627 + 77628 + 77627 + + + 73548 + 73548 + 73548 + 73548 + 73547 + 73547 + 73548 + 73548 + 73548 + 73548 + 73548 + 73548 + 73547 + 73548 + 73548 + 73546 + 73548 + 73548 + 73548 + + + 71089 + 71089 + 71089 + 71089 + 71089 + 71089 + 71089 + 71089 + 71089 + 71088 + 71089 + 71089 + 71089 + 71088 + 71089 + 71088 + 71089 + 71089 + 71089 + 71089 + + + 66279 + 66278 + 66278 + 66279 + 66278 + 66278 + 66279 + 66278 + 66279 + 66279 + 66278 + 66279 + 66278 + 66279 + 66279 + 66276 + 66279 + 66278 + 66279 + 66278 + 66279 + + + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + 61668 + + + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58930 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + 58932 + + + 59744 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59742 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + 59743 + + + 1010340 + + + 620409 + 620409 + + + 296538 + 296538 + 296538 + + + 215700 + 215700 + 215700 + 215699 + + + 174312 + 174312 + 174312 + 174312 + 174311 + + + 170602 + 170602 + 170602 + 170602 + 170602 + 170602 + + + 130052 + 130052 + 130052 + 130052 + 130052 + 130052 + 130052 + + + 123766 + 123766 + 123766 + 123766 + 123765 + 123766 + 123765 + 123765 + + + 111929 + 111929 + 111929 + 111929 + 111929 + 111929 + 111929 + 111929 + 111929 + + + 102389 + 102389 + 102389 + 102389 + 102389 + 102388 + 102389 + 102389 + 102389 + 102389 + + + 83115 + 83115 + 83114 + 83115 + 83115 + 83115 + 83115 + 83115 + 83115 + 83115 + 83114 + + + 83676 + 83676 + 83675 + 83675 + 83675 + 83676 + 83675 + 83675 + 83675 + 83675 + 83675 + 83676 + + + 76286 + 76286 + 76285 + 76285 + 76285 + 76285 + 76285 + 76285 + 76286 + 76286 + 76286 + 76285 + 76285 + + + 70103 + 70103 + 70102 + 70102 + 70103 + 70103 + 70103 + 70103 + 70102 + 70103 + 70103 + 70103 + 70103 + 70103 + + + 69919 + 69919 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + 69918 + + + 68217 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68216 + 68217 + 68216 + + + 61790 + 61790 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61789 + 61788 + 61789 + + + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60461 + 60460 + 60461 + 60461 + + + 57213 + 57212 + 57212 + 57212 + 57212 + 57212 + 57212 + 57212 + 57212 + 57213 + 57212 + 57212 + 57212 + 57212 + 57213 + 57212 + 57212 + 57212 + 57212 + + + 54035 + 54035 + 54034 + 54035 + 54034 + 54035 + 54035 + 54035 + 54035 + 54035 + 54035 + 54035 + 54035 + 54035 + 54035 + 54034 + 54035 + 54035 + 54035 + 54035 + + + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50775 + 50776 + 50774 + 50775 + 50775 + 50775 + 50775 + 50775 + + + 49376 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49375 + 49376 + 49375 + 49375 + 49375 + + + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + 45738 + 45740 + 45739 + 45739 + 45739 + 45739 + 45739 + 45739 + + + 44861 + 44861 + 44861 + 44860 + 44860 + 44861 + 44861 + 44860 + 44860 + 44861 + 44861 + 44860 + 44860 + 44861 + 44861 + 44860 + 44860 + 44860 + 44861 + 44861 + 44860 + 44860 + 44860 + 44861 + + + 1000567 + + + 683812 + 1367623 + + + 330260 + 660518 + 660518 + + + 255828 + 511655 + 511654 + 511654 + + + 193880 + 387758 + 387758 + 387758 + 387758 + + + 173375 + 346750 + 346749 + 346750 + 346750 + 346750 + + + 141783 + 283565 + 283565 + 283564 + 283564 + 283564 + 283564 + + + 126522 + 253043 + 253043 + 253042 + 253042 + 253042 + 253043 + 253042 + + + 133657 + 267312 + 267311 + 267311 + 267311 + 267311 + 267312 + 267312 + 267312 + + + 111070 + 222140 + 222139 + 222139 + 222139 + 222139 + 222139 + 222139 + 222139 + 222139 + + + 103736 + 207471 + 207470 + 207470 + 207470 + 207471 + 207470 + 207471 + 207470 + 207471 + 207470 + + + 105996 + 211991 + 211990 + 211991 + 211990 + 211990 + 211991 + 211990 + 211991 + 211991 + 211991 + 211991 + + + 86609 + 173218 + 173217 + 173217 + 173217 + 173218 + 173217 + 173217 + 173217 + 173218 + 173217 + 173217 + 173217 + + + 81869 + 163738 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + 163737 + + + 85344 + 170687 + 170687 + 170687 + 170687 + 170687 + 170687 + 170687 + 170687 + 170688 + 170687 + 170687 + 170687 + 170688 + 170688 + + + 79924 + 159846 + 159846 + 159846 + 159845 + 159845 + 159845 + 159845 + 159846 + 159846 + 159846 + 159845 + 159846 + 159846 + 159846 + 159844 + + + 80222 + 160443 + 160443 + 160442 + 160442 + 160443 + 160443 + 160443 + 160443 + 160443 + 160443 + 160443 + 160443 + 160443 + 160443 + 160440 + 160442 + + + 69494 + 138986 + 138985 + 138986 + 138986 + 138986 + 138986 + 138985 + 138986 + 138986 + 138986 + 138986 + 138986 + 138985 + 138987 + 138982 + 138986 + 138986 + + + 69038 + 138076 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138075 + 138076 + 138073 + 138076 + 138075 + 138075 + + + 62529 + 125057 + 125056 + 125056 + 125057 + 125056 + 125057 + 125057 + 125056 + 125057 + 125056 + 125056 + 125056 + 125056 + 125057 + 125052 + 125057 + 125056 + 125057 + 125056 + + + 60751 + 121501 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121500 + 121499 + 121500 + 121501 + 121500 + 121500 + + + 60966 + 121931 + 121930 + 121930 + 121930 + 121930 + 121930 + 121930 + 121930 + 121931 + 121930 + 121930 + 121930 + 121930 + 121930 + 121928 + 121931 + 121930 + 121929 + 121930 + 121930 + 121930 + + + 57060 + 114119 + 114118 + 114117 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114118 + 114119 + 114118 + 114118 + 114118 + 114118 + + + 53624 + 107247 + 107247 + 107247 + 107247 + 107247 + 107247 + 107248 + 107247 + 107248 + 107247 + 107247 + 107247 + 107247 + 107248 + 107247 + 107247 + 107247 + 107247 + 107247 + 107247 + 107247 + 107247 + 107247 + + +*** END OF TEST TMFINE 1 *** -- cgit v1.2.3