From 939411488edf0e602d872ed97e6e3bb45d87e173 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sun, 12 Oct 2014 08:39:14 +0000 Subject: [PATCH] split time_critical and super_seeding tests out of test_swarm --- Jamfile | 3 + test/Jamfile | 3 + test/Makefile.am | 9 +- test/swarm_suite.cpp | 229 ++++++++++++++++++++++++++++++++++++ test/swarm_suite.hpp | 46 ++++++++ test/test_super_seeding.cpp | 46 ++++++++ test/test_swarm.cpp | 217 +--------------------------------- test/test_time_critical.cpp | 43 +++++++ 8 files changed, 378 insertions(+), 218 deletions(-) create mode 100644 test/swarm_suite.cpp create mode 100644 test/swarm_suite.hpp create mode 100644 test/test_super_seeding.cpp create mode 100644 test/test_time_critical.cpp diff --git a/Jamfile b/Jamfile index 899b8b6bf..4c6d41fbc 100755 --- a/Jamfile +++ b/Jamfile @@ -671,6 +671,9 @@ local usage-requirements = # disable some warnings for gcc gcc:-fno-strict-aliasing gcc:-Wno-missing-braces +# suppress warnings caused by boost using c++11 features even when not +# in c++11 mode + darwin:-Wno-c++11-extensions # assert on integer overflow system:$(CXXFLAGS) system:$(LDFLAGS) diff --git a/test/Jamfile b/test/Jamfile index 5bdbbcb6e..6edf5eb81 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -51,6 +51,7 @@ lib libtorrent_test udp_tracker.cpp peer_server.cpp web_seed_suite.cpp + swarm_suite.cpp : # requirements # this is used to determine whether @@ -159,6 +160,8 @@ test-suite libtorrent : # [ run test_entry.cpp ] [ run test_metadata_extension.cpp ] [ run test_trackers_extension.cpp ] + [ run test_time_critical.cpp ] + [ run test_super_seeding.cpp ] [ run test_swarm.cpp ] [ run test_lsd.cpp ] [ run test_pex.cpp ] diff --git a/test/Makefile.am b/test/Makefile.am index c5126ef84..c89a45e1d 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -40,6 +40,8 @@ test_programs = \ test_rss \ test_ssl \ test_storage \ + test_time_critical \ + test_super_seeding \ test_swarm \ test_tailqueue \ test_threads \ @@ -121,14 +123,15 @@ EXTRA_DIST = Jamfile \ EXTRA_PROGRAMS = $(test_programs) noinst_HEADERS = test.hpp setup_transfer.hpp dht_server.hpp \ - peer_server.hpp udp_tracker.hpp web_seed_suite.hpp + peer_server.hpp udp_tracker.hpp web_seed_suite.hpp swarm_suite.hpp libtest_la_SOURCES = main.cpp \ setup_transfer.cpp \ dht_server.cpp \ udp_tracker.cpp \ peer_server.cpp \ - web_seed_suite.cpp + web_seed_suite.cpp \ + swarm_suite.cpp test_bitfield_SOURCES = test_bitfield.cpp test_torrent_info_SOURCES = test_torrent_info.cpp @@ -167,6 +170,8 @@ test_packet_buffer_SOURCES = test_packet_buffer.cpp test_read_piece_SOURCES = test_read_piece.cpp test_storage_SOURCES = test_storage.cpp test_settings_pack_SOURCES = test_settings_pack.cpp +test_time_critical_SOURCES = test_time_critical.cpp +test_super_seeding_SOURCES = test_super_seeding.cpp test_swarm_SOURCES = test_swarm.cpp test_tailqueue_SOURCES = test_tailqueue.cpp test_rss_SOURCES = test_rss.cpp diff --git a/test/swarm_suite.cpp b/test/swarm_suite.cpp new file mode 100644 index 000000000..89f24e260 --- /dev/null +++ b/test/swarm_suite.cpp @@ -0,0 +1,229 @@ +/* + +Copyright (c) 2014, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "libtorrent/session.hpp" +#include "libtorrent/session_settings.hpp" +#include "libtorrent/hasher.hpp" +#include "libtorrent/alert_types.hpp" +#include "libtorrent/thread.hpp" +#include "libtorrent/time.hpp" +#include + +#include "test.hpp" +#include "setup_transfer.hpp" +#include "swarm_suite.hpp" + +void test_swarm(int flags) +{ + using namespace libtorrent; + namespace lt = libtorrent; + + fprintf(stderr, "\n\n ==== TEST SWARM === %s%s%s%s%s%s ===\n\n\n" + , (flags & super_seeding) ? "super-seeding ": "" + , (flags & strict_super_seeding) ? "strict-super-seeding ": "" + , (flags & seed_mode) ? "seed-mode ": "" + , (flags & time_critical) ? "time-critical ": "" + , (flags & suggest) ? "suggest ": "" + , (flags & explicit_cache) ? "explicit-cache ": "" + ); + + // in case the previous run was terminated + error_code ec; + remove_all("tmp1_swarm", ec); + remove_all("tmp2_swarm", ec); + remove_all("tmp3_swarm", ec); + + // these are declared before the session objects + // so that they are destructed last. This enables + // the sessions to destruct in parallel + session_proxy p1; + session_proxy p2; + session_proxy p3; + + int mask = alert::all_categories + & ~(alert::progress_notification + | alert::performance_warning + | alert::stats_notification); + + settings_pack pack; + pack.set_int(settings_pack::alert_mask, mask); + pack.set_bool(settings_pack::allow_multiple_connections_per_ip, true); + + if (flags & strict_super_seeding) + pack.set_bool(settings_pack::strict_super_seeding, true); + + if (flags & suggest) + pack.set_int(settings_pack::suggest_mode, settings_pack::suggest_read_cache); + + if (flags & explicit_cache) + pack.set_bool(settings_pack::explicit_read_cache, true); + + if (flags & explicit_cache) + { + pack.set_bool(settings_pack::explicit_read_cache, true); + pack.set_int(settings_pack::explicit_cache_interval, 5); + } + + // this is to avoid everything finish from a single peer + // immediately. To make the swarm actually connect all + // three peers before finishing. + float rate_limit = 100000; + + pack.set_int(settings_pack::upload_rate_limit, rate_limit); + pack.set_str(settings_pack::listen_interfaces, "0.0.0.0:48000"); + pack.set_int(settings_pack::max_retry_port_bind, 1000); + + pack.set_int(settings_pack::out_enc_policy, settings_pack::pe_forced); + pack.set_int(settings_pack::in_enc_policy, settings_pack::pe_forced); + + lt::session ses1(pack, fingerprint("LT", 0, 1, 0, 0)); + + ses1.apply_settings(pack); + + pack.set_int(settings_pack::download_rate_limit, rate_limit / 2); + pack.set_int(settings_pack::upload_rate_limit, rate_limit); + lt::session ses2(pack, fingerprint("LT", 0, 1, 0, 0)); + lt::session ses3(pack, fingerprint("LT", 0, 1, 0, 0)); + + torrent_handle tor1; + torrent_handle tor2; + torrent_handle tor3; + + add_torrent_params p; + if (flags & seed_mode) p.flags |= add_torrent_params::flag_seed_mode; + // test using piece sizes smaller than 16kB + boost::tie(tor1, tor2, tor3) = setup_transfer(&ses1, &ses2, &ses3, true + , false, true, "_swarm", 8 * 1024, 0, flags & super_seeding, &p); + + if (flags & time_critical) + { + tor2.set_piece_deadline(2, 0); + tor2.set_piece_deadline(5, 1000); + tor2.set_piece_deadline(8, 2000); + } + + float sum_dl_rate2 = 0.f; + float sum_dl_rate3 = 0.f; + int count_dl_rates2 = 0; + int count_dl_rates3 = 0; + + for (int i = 0; i < 80; ++i) + { + print_alerts(ses1, "ses1"); + print_alerts(ses2, "ses2"); + print_alerts(ses3, "ses3"); + + torrent_status st1 = tor1.status(); + torrent_status st2 = tor2.status(); + torrent_status st3 = tor3.status(); + + if (st2.progress < 1.f && st2.progress > 0.5f) + { + sum_dl_rate2 += st2.download_payload_rate; + ++count_dl_rates2; + } + if (st3.progress < 1.f && st3.progress > 0.5f) + { + sum_dl_rate3 += st3.download_rate; + ++count_dl_rates3; + } + + print_ses_rate(i, &st1, &st2, &st3); + + if (st2.is_seeding && st3.is_seeding) break; + test_sleep(1000); + } + + TEST_CHECK(tor2.status().is_seeding); + TEST_CHECK(tor3.status().is_seeding); + + float average2 = sum_dl_rate2 / float(count_dl_rates2); + float average3 = sum_dl_rate3 / float(count_dl_rates3); + + std::cerr << average2 << std::endl; + std::cerr << "average rate: " << (average2 / 1000.f) << "kB/s - " + << (average3 / 1000.f) << "kB/s" << std::endl; + + if (tor2.status().is_seeding && tor3.status().is_seeding) std::cerr << "done\n"; + + // make sure the files are deleted + ses1.remove_torrent(tor1, lt::session::delete_files); + ses2.remove_torrent(tor2, lt::session::delete_files); + ses3.remove_torrent(tor3, lt::session::delete_files); + + std::auto_ptr a = ses1.pop_alert(); + ptime end = time_now() + seconds(20); + while (a.get() == 0 || dynamic_cast(a.get()) == 0) + { + if (ses1.wait_for_alert(end - time_now()) == 0) + { + std::cerr << "wait_for_alert() expired" << std::endl; + break; + } + a = ses1.pop_alert(); + assert(a.get()); + std::cerr << a->message() << std::endl; + } + + TEST_CHECK(dynamic_cast(a.get()) != 0); + + // there shouldn't be any alerts generated from now on + // make sure that the timer in wait_for_alert() works + // this should time out (ret == 0) and it should take + // about 2 seconds + ptime start = time_now_hires(); + alert const* ret; + while ((ret = ses1.wait_for_alert(seconds(2)))) + { + a = ses1.pop_alert(); + std::cerr << ret->message() << std::endl; + start = time_now(); + } + + // this allows shutting down the sessions in parallel + p1 = ses1.abort(); + p2 = ses2.abort(); + p3 = ses3.abort(); + + TEST_CHECK(time_now_hires() - start < seconds(3)); + TEST_CHECK(time_now_hires() - start >= seconds(2)); + + TEST_CHECK(!exists("tmp1_swarm/temporary")); + TEST_CHECK(!exists("tmp2_swarm/temporary")); + TEST_CHECK(!exists("tmp3_swarm/temporary")); + + remove_all("tmp1_swarm", ec); + remove_all("tmp2_swarm", ec); + remove_all("tmp3_swarm", ec); +} + + diff --git a/test/swarm_suite.hpp b/test/swarm_suite.hpp new file mode 100644 index 000000000..68f7aeaa5 --- /dev/null +++ b/test/swarm_suite.hpp @@ -0,0 +1,46 @@ +/* + +Copyright (c) 2014, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "test.hpp" + +enum test_flags_t +{ + super_seeding = 1, + strict_super_seeding = 2, + seed_mode = 4, + time_critical = 8, + suggest = 16, + explicit_cache = 32 +}; + +void EXPORT test_swarm(int flags = 0); + diff --git a/test/test_super_seeding.cpp b/test/test_super_seeding.cpp new file mode 100644 index 000000000..9e9d92730 --- /dev/null +++ b/test/test_super_seeding.cpp @@ -0,0 +1,46 @@ +/* + +Copyright (c) 2014, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "swarm_suite.hpp" + +int test_main() +{ + // with super seeding + test_swarm(super_seeding); + + // with strict super seeding + test_swarm(super_seeding | strict_super_seeding); + + return 0; +} + + diff --git a/test/test_swarm.cpp b/test/test_swarm.cpp index 05fc2a192..aa837cf05 100644 --- a/test/test_swarm.cpp +++ b/test/test_swarm.cpp @@ -30,230 +30,15 @@ POSSIBILITY OF SUCH DAMAGE. */ -#include "libtorrent/session.hpp" -#include "libtorrent/session_settings.hpp" -#include "libtorrent/hasher.hpp" -#include "libtorrent/alert_types.hpp" -#include "libtorrent/thread.hpp" -#include "libtorrent/time.hpp" -#include - -#include "test.hpp" -#include "setup_transfer.hpp" -#include - -enum test_flags_t -{ - super_seeding = 1, - strict_super_seeding = 2, - seed_mode = 4, - time_critical = 8, - suggest = 16, - explicit_cache = 32 -}; - -void test_swarm(int flags = 0) -{ - using namespace libtorrent; - namespace lt = libtorrent; - - fprintf(stderr, "\n\n ==== TEST SWARM === %s%s%s%s%s%s ===\n\n\n" - , (flags & super_seeding) ? "super-seeding ": "" - , (flags & strict_super_seeding) ? "strict-super-seeding ": "" - , (flags & seed_mode) ? "seed-mode ": "" - , (flags & time_critical) ? "time-critical ": "" - , (flags & suggest) ? "suggest ": "" - , (flags & explicit_cache) ? "explicit-cache ": "" - ); - - // in case the previous run was terminated - error_code ec; - remove_all("tmp1_swarm", ec); - remove_all("tmp2_swarm", ec); - remove_all("tmp3_swarm", ec); - - // these are declared before the session objects - // so that they are destructed last. This enables - // the sessions to destruct in parallel - session_proxy p1; - session_proxy p2; - session_proxy p3; - - int mask = alert::all_categories - & ~(alert::progress_notification - | alert::performance_warning - | alert::stats_notification); - - settings_pack pack; - pack.set_int(settings_pack::alert_mask, mask); - pack.set_bool(settings_pack::allow_multiple_connections_per_ip, true); - - if (flags & strict_super_seeding) - pack.set_bool(settings_pack::strict_super_seeding, true); - - if (flags & suggest) - pack.set_int(settings_pack::suggest_mode, settings_pack::suggest_read_cache); - - if (flags & explicit_cache) - pack.set_bool(settings_pack::explicit_read_cache, true); - - if (flags & explicit_cache) - { - pack.set_bool(settings_pack::explicit_read_cache, true); - pack.set_int(settings_pack::explicit_cache_interval, 5); - } - - // this is to avoid everything finish from a single peer - // immediately. To make the swarm actually connect all - // three peers before finishing. - float rate_limit = 100000; - - pack.set_int(settings_pack::upload_rate_limit, rate_limit); - pack.set_str(settings_pack::listen_interfaces, "0.0.0.0:48000"); - pack.set_int(settings_pack::max_retry_port_bind, 1000); - - pack.set_int(settings_pack::out_enc_policy, settings_pack::pe_forced); - pack.set_int(settings_pack::in_enc_policy, settings_pack::pe_forced); - - lt::session ses1(pack, fingerprint("LT", 0, 1, 0, 0)); - - ses1.apply_settings(pack); - - pack.set_int(settings_pack::download_rate_limit, rate_limit / 2); - pack.set_int(settings_pack::upload_rate_limit, rate_limit); - lt::session ses2(pack, fingerprint("LT", 0, 1, 0, 0)); - lt::session ses3(pack, fingerprint("LT", 0, 1, 0, 0)); - - torrent_handle tor1; - torrent_handle tor2; - torrent_handle tor3; - - add_torrent_params p; - if (flags & seed_mode) p.flags |= add_torrent_params::flag_seed_mode; - // test using piece sizes smaller than 16kB - boost::tie(tor1, tor2, tor3) = setup_transfer(&ses1, &ses2, &ses3, true - , false, true, "_swarm", 8 * 1024, 0, flags & super_seeding, &p); - - if (flags & time_critical) - { - tor2.set_piece_deadline(2, 0); - tor2.set_piece_deadline(5, 1000); - tor2.set_piece_deadline(8, 2000); - } - - float sum_dl_rate2 = 0.f; - float sum_dl_rate3 = 0.f; - int count_dl_rates2 = 0; - int count_dl_rates3 = 0; - - for (int i = 0; i < 80; ++i) - { - print_alerts(ses1, "ses1"); - print_alerts(ses2, "ses2"); - print_alerts(ses3, "ses3"); - - torrent_status st1 = tor1.status(); - torrent_status st2 = tor2.status(); - torrent_status st3 = tor3.status(); - - if (st2.progress < 1.f && st2.progress > 0.5f) - { - sum_dl_rate2 += st2.download_payload_rate; - ++count_dl_rates2; - } - if (st3.progress < 1.f && st3.progress > 0.5f) - { - sum_dl_rate3 += st3.download_rate; - ++count_dl_rates3; - } - - print_ses_rate(i, &st1, &st2, &st3); - - if (st2.is_seeding && st3.is_seeding) break; - test_sleep(1000); - } - - TEST_CHECK(tor2.status().is_seeding); - TEST_CHECK(tor3.status().is_seeding); - - float average2 = sum_dl_rate2 / float(count_dl_rates2); - float average3 = sum_dl_rate3 / float(count_dl_rates3); - - std::cerr << average2 << std::endl; - std::cerr << "average rate: " << (average2 / 1000.f) << "kB/s - " - << (average3 / 1000.f) << "kB/s" << std::endl; - - if (tor2.status().is_seeding && tor3.status().is_seeding) std::cerr << "done\n"; - - // make sure the files are deleted - ses1.remove_torrent(tor1, lt::session::delete_files); - ses2.remove_torrent(tor2, lt::session::delete_files); - ses3.remove_torrent(tor3, lt::session::delete_files); - - std::auto_ptr a = ses1.pop_alert(); - ptime end = time_now() + seconds(20); - while (a.get() == 0 || dynamic_cast(a.get()) == 0) - { - if (ses1.wait_for_alert(end - time_now()) == 0) - { - std::cerr << "wait_for_alert() expired" << std::endl; - break; - } - a = ses1.pop_alert(); - assert(a.get()); - std::cerr << a->message() << std::endl; - } - - TEST_CHECK(dynamic_cast(a.get()) != 0); - - // there shouldn't be any alerts generated from now on - // make sure that the timer in wait_for_alert() works - // this should time out (ret == 0) and it should take - // about 2 seconds - ptime start = time_now_hires(); - alert const* ret; - while ((ret = ses1.wait_for_alert(seconds(2)))) - { - a = ses1.pop_alert(); - std::cerr << ret->message() << std::endl; - start = time_now(); - } - - // this allows shutting down the sessions in parallel - p1 = ses1.abort(); - p2 = ses2.abort(); - p3 = ses3.abort(); - - TEST_CHECK(time_now_hires() - start < seconds(3)); - TEST_CHECK(time_now_hires() - start >= seconds(2)); - - TEST_CHECK(!exists("tmp1_swarm/temporary")); - TEST_CHECK(!exists("tmp2_swarm/temporary")); - TEST_CHECK(!exists("tmp3_swarm/temporary")); - - remove_all("tmp1_swarm", ec); - remove_all("tmp2_swarm", ec); - remove_all("tmp3_swarm", ec); -} +#include "swarm_suite.hpp" int test_main() { - using namespace libtorrent; - - // with time critical pieces - test_swarm(time_critical); - // with seed mode test_swarm(seed_mode); test_swarm(); - // with super seeding - test_swarm(super_seeding); - - // with strict super seeding - test_swarm(super_seeding | strict_super_seeding); - // with suggest pieces test_swarm(suggest); diff --git a/test/test_time_critical.cpp b/test/test_time_critical.cpp new file mode 100644 index 000000000..1aa0ec7aa --- /dev/null +++ b/test/test_time_critical.cpp @@ -0,0 +1,43 @@ +/* + +Copyright (c) 2014, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include "swarm_suite.hpp" + +int test_main() +{ + // with time critical pieces + test_swarm(time_critical); + + return 0; +} + +