summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/date_time/test/posix_time/testiterator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/date_time/test/posix_time/testiterator.cpp')
-rw-r--r--src/boost/libs/date_time/test/posix_time/testiterator.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/boost/libs/date_time/test/posix_time/testiterator.cpp b/src/boost/libs/date_time/test/posix_time/testiterator.cpp
new file mode 100644
index 000000000..47ebb603c
--- /dev/null
+++ b/src/boost/libs/date_time/test/posix_time/testiterator.cpp
@@ -0,0 +1,135 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <iostream>
+#include "boost/date_time/posix_time/posix_time.hpp"
+#include "../testfrmwk.hpp"
+#if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+#include "boost/date_time/gregorian/formatters_limited.hpp"
+#else
+#include "boost/date_time/gregorian/formatters.hpp"
+#endif
+
+void iterate_backward(const boost::posix_time::ptime *answers, int ary_len,
+ const boost::posix_time::time_duration& td)
+{
+ using namespace boost::posix_time;
+ using namespace boost::gregorian;
+
+ int i = ary_len -1;
+ ptime end = answers[i];
+ time_iterator titr(end,td);
+
+ std::cout << "counting down by previous duration..." << std::endl;
+ for (; titr >= answers[0]; --titr) {
+ std::cout << *titr << std::endl;
+ check("iterating backward", answers[i] == *titr);
+ --i;
+ }
+ check("iterating backward count", i == -1); // check the number of iterations
+ std::cout << std::endl;
+}
+
+int
+main()
+{
+ using namespace boost::posix_time;
+ using namespace boost::gregorian;
+
+ date d(2000,Jan,20);
+ ptime start(d);
+ const ptime answer1[] = {ptime(d), ptime(d,seconds(1)),
+ ptime(d,seconds(2)), ptime(d,seconds(3))};
+ int i=0;
+ time_iterator titr(start,seconds(1));
+ for (; titr < ptime(d,seconds(4)); ++titr) {
+ std::cout << *titr << std::endl;
+ check("iterator -- 1 sec", answer1[i] == *titr);
+ i++;
+ }
+ check("iterator -- 1 sec", i == 4); // check the number of iterations
+
+ iterate_backward(answer1, 4, seconds(1));
+
+ //iterate by hours
+ const ptime answer2[] = {ptime(d), ptime(d,hours(1)),
+ ptime(d,hours(2)), ptime(d,hours(3))};
+ i=0;
+ time_iterator titr2(start,hours(1));
+ for (; titr2 < ptime(d,hours(4)); ++titr2) {
+ std::cout << *titr2 << std::endl;
+ check("iterator -- 1 hour", answer2[i] == *titr2);
+ i++;
+ }
+ check("iterator -- 1 hour", i == 4); // check the number of iterations
+
+ iterate_backward(answer2, 4, hours(1));
+
+
+ //iterate by 15 mintues
+ const ptime answer3[] = {ptime(d), ptime(d,minutes(15)),
+ ptime(d,minutes(30)), ptime(d,minutes(45)),
+ ptime(d,minutes(60)), ptime(d,minutes(75))};
+ i=0;
+ time_iterator titr3(start,minutes(15));
+ for (; titr3 < ptime(d,time_duration(1,20,0)); ++titr3) {
+ std::cout << *titr3 << std::endl;
+ check("iterator -- 15 min", answer3[i] == *titr3);
+ i++;
+ }
+ check("iterator -- 15 min", i == 6); // check the number of iterations
+
+ iterate_backward(answer3, 6, minutes(15));
+
+ //iterate by .1 seconds
+ const ptime answer4[] = {ptime(d), ptime(d,time_duration(0,0,0,1000)),
+ ptime(d,time_duration(0,0,0,2000)),
+ ptime(d,time_duration(0,0,0,3000))};
+ i=0;
+ time_iterator titr4(start,time_duration(0,0,0,1000));
+ for (; titr4 < ptime(d,time_duration(0,0,0,4000)); ++titr4) {
+ std::cout << *titr4 << std::endl;
+ check("iterator -- tenth sec", answer4[i] == *titr4);
+ i++;
+ }
+ check("iterator -- tenth sec", i == 4); // check the number of iterations
+
+ iterate_backward(answer4, 4, time_duration(0,0,0,1000));
+
+ //iterate by crazy duration
+ time_duration crzyd = duration_from_string("2:18:32.423");
+ const ptime answer5[] = {ptime(d), ptime(d,crzyd),
+ ptime(d, crzyd * 2),
+ ptime(d, crzyd * 3)};
+ i=0;
+ time_iterator titr5(start,crzyd);
+ for (; titr5 < ptime(d,crzyd * 4); ++titr5) {
+ std::cout << *titr5 << std::endl;
+ check("iterator -- crazy duration", answer5[i] == *titr5);
+ i++;
+ }
+ check("iterator -- crazy duration", i == 4); // check the number of iterations
+
+ iterate_backward(answer5, 4, crzyd);
+
+ //iterate up by neg_dur
+ time_duration pos_dur = minutes(3);
+ time_duration neg_dur = -pos_dur;
+ time_iterator up_itr(start, neg_dur), dn_itr(start, pos_dur);
+
+ for(i=0; i < 10; ++i)
+ {
+ check("up-by-neg == backward iterate", *up_itr == *dn_itr);
+ ++up_itr; // up by -3
+ --dn_itr; // down by 3
+ }
+
+
+ return printTestStats();
+}
+