diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake
index 519697d43..c966157d5 100644
--- a/CMakeLists_files.cmake
+++ b/CMakeLists_files.cmake
@@ -41,6 +41,7 @@ list (APPEND MAIN_SOURCE_FILES
list (APPEND TEST_SOURCE_FILES
tests/test_block.cpp
tests/test_boprops_ad.cpp
+ tests/test_span.cpp
tests/test_syntax.cpp
)
diff --git a/opm/autodiff/AutoDiffHelpers.hpp b/opm/autodiff/AutoDiffHelpers.hpp
index 1fba87159..ca05b61e4 100644
--- a/opm/autodiff/AutoDiffHelpers.hpp
+++ b/opm/autodiff/AutoDiffHelpers.hpp
@@ -485,6 +485,10 @@ public:
ASSERT(span_ == rhs.span_);
return index_ != rhs.index_;
}
+ int operator*()
+ {
+ return (*span_)[index_];
+ }
private:
const Span* span_;
int index_;
diff --git a/tests/test_span.cpp b/tests/test_span.cpp
new file mode 100644
index 000000000..5a8c0c868
--- /dev/null
+++ b/tests/test_span.cpp
@@ -0,0 +1,69 @@
+/*
+ Copyright 2013 SINTEF ICT, Applied Mathematics.
+
+ This file is part of the Open Porous Media project (OPM).
+
+ OPM is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OPM is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OPM. If not, see .
+*/
+
+
+#include
+
+#if HAVE_DYNAMIC_BOOST_TEST
+#define BOOST_TEST_DYN_LINK
+#endif
+
+#define BOOST_TEST_MODULE SpanTest
+
+#include
+
+#include
+
+
+BOOST_AUTO_TEST_CASE(OneArgConstr)
+{
+ const int num = 4;
+ const Span s(num);
+ BOOST_CHECK(s.size() == num);
+ for (int i = 0; i < num; ++i) {
+ BOOST_CHECK(s[i] == i);
+ }
+ int count = 0;
+ for (Span::const_iterator it = s.begin(); it != s.end(); ++it) {
+ BOOST_CHECK(*it == count);
+ ++count;
+ }
+ BOOST_CHECK(count = num);
+}
+
+BOOST_AUTO_TEST_CASE(ThreeArgConstr)
+{
+ const int num = 3;
+ const int stride = 7;
+ const int start = 5;
+ const int seq[num] = { start, start + 1*stride, start + 2*stride };
+
+ const Span s(num, stride, start);
+ BOOST_CHECK(s.size() == num);
+ for (int i = 0; i < num; ++i) {
+ BOOST_CHECK(s[i] == seq[i]);
+ }
+ int count = 0;
+ for (Span::const_iterator it = s.begin(); it != s.end(); ++it) {
+ BOOST_CHECK(*it == seq[count]);
+ ++count;
+ }
+ BOOST_CHECK(count = num);
+}
+