blob: 5116856228d6ca9af2092847ab5568410ec49bf0 [file] [log] [blame]
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Zhiyi Zhang19a11d22018-04-12 22:58:20 -07003 * Copyright (c) 2014-2018, Regents of the University of California
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07004 *
Alexander Afanasyev9091d832018-04-18 17:21:08 -04005 * This file is part of NAC (Name-Based Access Control for NDN).
6 * See AUTHORS.md for complete list of NAC authors and contributors.
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07007 *
Alexander Afanasyev9091d832018-04-18 17:21:08 -04008 * NAC is free software: you can redistribute it and/or modify it under the terms
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07009 * 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 *
Alexander Afanasyev9091d832018-04-18 17:21:08 -040012 * NAC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070013 * 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
Alexander Afanasyev9091d832018-04-18 17:21:08 -040017 * NAC, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070018 *
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070019 * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070020 */
21
22#include "interval.hpp"
23#include "boost-test.hpp"
24
25namespace ndn {
Alexander Afanasyev9091d832018-04-18 17:21:08 -040026namespace nac {
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070027namespace 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
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070036 Interval interval1(from_iso_string("20150825T120000"), from_iso_string("20150825T160000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070037 BOOST_CHECK_EQUAL(to_iso_string(interval1.getStartTime()), "20150825T120000");
38 BOOST_CHECK_EQUAL(to_iso_string(interval1.getEndTime()), "20150825T160000");
39 BOOST_CHECK_EQUAL(interval1.isValid(), true);
40
41 // construct with the invalid interval
42 Interval interval2;
43 BOOST_CHECK_EQUAL(interval2.isValid(), false);
44
45 // construct with the empty interval
46 Interval interval3(true);
47 BOOST_CHECK_EQUAL(interval3.isValid(), true);
48 BOOST_CHECK_EQUAL(interval3.isEmpty(), true);
49}
50
51BOOST_AUTO_TEST_CASE(CoverTimePoint)
52{
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070053 Interval interval(from_iso_string("20150825T120000"), from_iso_string("20150825T160000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070054
55 TimeStamp tp1 = from_iso_string("20150825T120000");
56 TimeStamp tp2 = from_iso_string("20150825T130000");
57 TimeStamp tp3 = from_iso_string("20150825T170000");
58 TimeStamp tp4 = from_iso_string("20150825T110000");
59
60 BOOST_CHECK_EQUAL(interval.covers(tp1), true);
61 BOOST_CHECK_EQUAL(interval.covers(tp2), true);
62 BOOST_CHECK_EQUAL(interval.covers(tp3), false);
63 BOOST_CHECK_EQUAL(interval.covers(tp4), false);
64}
65
66BOOST_AUTO_TEST_CASE(IntersectionAndUnion)
67{
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070068 Interval interval1(from_iso_string("20150825T030000"), from_iso_string("20150825T050000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070069 // no intersection
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070070 Interval interval2(from_iso_string("20150825T050000"), from_iso_string("20150825T070000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070071 // no intersection
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070072 Interval interval3(from_iso_string("20150825T060000"), from_iso_string("20150825T070000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070073 // there's an intersection
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070074 Interval interval4(from_iso_string("20150825T010000"), from_iso_string("20150825T040000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070075 // right in the interval1, there's an intersection
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070076 Interval interval5(from_iso_string("20150825T030000"), from_iso_string("20150825T040000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070077 // wrap the interval1, there's an intersection
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070078 Interval interval6(from_iso_string("20150825T010000"), from_iso_string("20150825T050000"));
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070079 // empty interval
80 Interval interval7(true);
81
82 Interval tempInterval = interval1;
83 tempInterval && interval2;
84 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), true);
85
86 tempInterval = interval1;
87 BOOST_CHECK_THROW(tempInterval || interval2, Interval::Error);
88
89 tempInterval = interval1;
90 tempInterval && interval3;
91 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), true);
92
93 tempInterval = interval1;
94 BOOST_CHECK_THROW(tempInterval || interval3, Interval::Error);
95
96 tempInterval = interval1;
97 tempInterval && interval4;
98 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
99 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
100 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T040000");
101
102 tempInterval = interval1;
103 tempInterval || interval4;
104 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
105 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T010000");
106 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
107
108 tempInterval = interval1;
109 tempInterval && interval5;
110 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
111 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
112 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T040000");
113
114 tempInterval = interval1;
115 tempInterval || interval5;
116 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
117 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
118 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
119
120 tempInterval = interval1;
121 tempInterval && interval6;
122 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
123 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
124 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
125
126 tempInterval = interval1;
127 tempInterval || interval6;
128 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
129 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T010000");
130 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
131
132 tempInterval = interval1;
133 tempInterval && interval7;
134 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), true);
135
136 tempInterval = interval1;
137 tempInterval || interval7;
138 BOOST_CHECK_EQUAL(tempInterval.isEmpty(), false);
139 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getStartTime()), "20150825T030000");
140 BOOST_CHECK_EQUAL(to_iso_string(tempInterval.getEndTime()), "20150825T050000");
141}
142
143BOOST_AUTO_TEST_SUITE_END()
144
145} // namespace tests
Alexander Afanasyev9091d832018-04-18 17:21:08 -0400146} // namespace nac
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700147} // namespace ndn