blob: e9cf6d922697d4adaf95a2a8e92df81aecc7fc49 [file] [log] [blame]
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014-2015, Regents of the University of California
4 *
5 * This file is part of ndn-group-encrypt (Group-based Encryption Protocol for NDN).
6 * See AUTHORS.md for complete list of ndn-group-encrypt authors and contributors.
7 *
8 * ndn-group-encrypt is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * ndn-group-encrypt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * ndn-group-encrypt, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Zhiyi Zhang <dreamerbarrychang@gmail.com>
20 */
21
22#include "interval.hpp"
23#include "boost-test.hpp"
24
25namespace ndn {
26namespace gep {
27namespace tests {
28
29using namespace boost::posix_time;
30
31BOOST_AUTO_TEST_SUITE(TestInterval)
32
33BOOST_AUTO_TEST_CASE(Construction)
34{
35 // construct with the right parameters
36 Interval interval1(from_iso_string("20150825T120000"),
37 from_iso_string("20150825T160000"));
38 BOOST_CHECK_EQUAL(to_iso_string(interval1.getStartTime()), "20150825T120000");
39 BOOST_CHECK_EQUAL(to_iso_string(interval1.getEndTime()), "20150825T160000");
40 BOOST_CHECK_EQUAL(interval1.isValid(), true);
41
42 // construct with the invalid interval
43 Interval interval2;
44 BOOST_CHECK_EQUAL(interval2.isValid(), false);
45
46 // construct with the empty interval
47 Interval interval3(true);
48 BOOST_CHECK_EQUAL(interval3.isValid(), true);
49 BOOST_CHECK_EQUAL(interval3.isEmpty(), true);
50}
51
52BOOST_AUTO_TEST_CASE(CoverTimePoint)
53{
54 Interval interval(from_iso_string("20150825T120000"),
55 from_iso_string("20150825T160000"));
56
57 TimeStamp tp1 = from_iso_string("20150825T120000");
58 TimeStamp tp2 = from_iso_string("20150825T130000");
59 TimeStamp tp3 = from_iso_string("20150825T170000");
60 TimeStamp tp4 = from_iso_string("20150825T110000");
61
62 BOOST_CHECK_EQUAL(interval.covers(tp1), true);
63 BOOST_CHECK_EQUAL(interval.covers(tp2), true);
64 BOOST_CHECK_EQUAL(interval.covers(tp3), false);
65 BOOST_CHECK_EQUAL(interval.covers(tp4), false);
66}
67
68BOOST_AUTO_TEST_CASE(IntersectionAndUnion)
69{
70 Interval interval1(from_iso_string("20150825T030000"),
71 from_iso_string("20150825T050000"));
72 // no intersection
73 Interval interval2(from_iso_string("20150825T050000"),
74 from_iso_string("20150825T070000"));
75 // no intersection
76 Interval interval3(from_iso_string("20150825T060000"),
77 from_iso_string("20150825T070000"));
78 // there's an intersection
79 Interval interval4(from_iso_string("20150825T010000"),
80 from_iso_string("20150825T040000"));
81 // right in the interval1, there's an intersection
82 Interval interval5(from_iso_string("20150825T030000"),
83 from_iso_string("20150825T040000"));
84 // wrap the interval1, there's an intersection
85 Interval interval6(from_iso_string("20150825T010000"),
86 from_iso_string("20150825T050000"));
87 // empty interval
88 Interval interval7(true);
89
90 Interval tempInterval = interval1;
91 tempInterval && interval2;
92 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), true);
93
94 tempInterval = interval1;
95 BOOST_CHECK_THROW(tempInterval || interval2, Interval::Error);
96
97 tempInterval = interval1;
98 tempInterval && interval3;
99 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), true);
100
101 tempInterval = interval1;
102 BOOST_CHECK_THROW(tempInterval || interval3, Interval::Error);
103
104 tempInterval = interval1;
105 tempInterval && interval4;
106 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
107 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
108 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T040000");
109
110 tempInterval = interval1;
111 tempInterval || interval4;
112 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
113 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T010000");
114 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
115
116 tempInterval = interval1;
117 tempInterval && interval5;
118 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
119 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
120 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T040000");
121
122 tempInterval = interval1;
123 tempInterval || interval5;
124 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
125 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
126 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
127
128 tempInterval = interval1;
129 tempInterval && interval6;
130 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
131 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
132 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
133
134 tempInterval = interval1;
135 tempInterval || interval6;
136 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
137 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T010000");
138 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
139
140 tempInterval = interval1;
141 tempInterval && interval7;
142 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), true);
143
144 tempInterval = interval1;
145 tempInterval || interval7;
146 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
147 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
148 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
149}
150
151BOOST_AUTO_TEST_SUITE_END()
152
153} // namespace tests
154} // namespace gep
155} // namespace ndn