|
Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
|
00001 /* 00002 // @HEADER 00003 // *********************************************************************** 00004 // 00005 // Teuchos: Common Tools Package 00006 // Copyright (2004) Sandia Corporation 00007 // 00008 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00009 // license for use of this work by or on behalf of the U.S. Government. 00010 // 00011 // Redistribution and use in source and binary forms, with or without 00012 // modification, are permitted provided that the following conditions are 00013 // met: 00014 // 00015 // 1. Redistributions of source code must retain the above copyright 00016 // notice, this list of conditions and the following disclaimer. 00017 // 00018 // 2. Redistributions in binary form must reproduce the above copyright 00019 // notice, this list of conditions and the following disclaimer in the 00020 // documentation and/or other materials provided with the distribution. 00021 // 00022 // 3. Neither the name of the Corporation nor the names of the 00023 // contributors may be used to endorse or promote products derived from 00024 // this software without specific prior written permission. 00025 // 00026 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00027 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00028 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00029 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00030 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00031 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00032 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00033 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00034 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00035 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00036 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00037 // 00038 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00039 // 00040 // *********************************************************************** 00041 // @HEADER 00042 */ 00043 00044 #include "Teuchos_UnitTestHarness.hpp" 00045 #include "Teuchos_as.hpp" 00046 #include "Teuchos_Range1D.hpp" 00047 00048 00049 namespace { 00050 00051 00052 using Teuchos::Range1D; 00053 typedef Teuchos::Ordinal Ordinal; 00054 00055 00056 TEUCHOS_UNIT_TEST( Range1D, range_0_0 ) 00057 { 00058 ECHO(Range1D rng(0,0)); 00059 TEST_EQUALITY_CONST(rng.lbound(), 0); 00060 TEST_EQUALITY_CONST(rng.ubound(), 0);; 00061 TEST_EQUALITY_CONST(rng.size(), 1); 00062 TEST_ASSERT(!rng.full_range()); 00063 TEST_ASSERT(!rng.in_range(-1)); 00064 TEST_ASSERT(rng.in_range(0)); 00065 TEST_ASSERT(!rng.in_range(1)); 00066 TEST_ASSERT(!rng.in_range(2)); 00067 } 00068 00069 00070 TEUCHOS_UNIT_TEST( Range1D, range_1_2 ) 00071 { 00072 ECHO(Range1D rng(1,2)); 00073 TEST_EQUALITY_CONST(rng.lbound(), 1); 00074 TEST_EQUALITY_CONST(rng.ubound(), 2);; 00075 TEST_EQUALITY_CONST(rng.size(), 2); 00076 TEST_ASSERT(!rng.full_range()); 00077 TEST_ASSERT(!rng.in_range(-1)); 00078 TEST_ASSERT(!rng.in_range(0)); 00079 TEST_ASSERT(rng.in_range(1)); 00080 TEST_ASSERT(rng.in_range(2)); 00081 TEST_ASSERT(!rng.in_range(3)); 00082 } 00083 00084 00085 TEUCHOS_UNIT_TEST( Range1D, range_full ) 00086 { 00087 ECHO(Range1D rng); 00088 TEST_EQUALITY_CONST(rng.lbound(), 0); 00089 TEST_EQUALITY_CONST(rng.ubound(), std::numeric_limits<Ordinal>::max()-1); 00090 TEST_EQUALITY_CONST(rng.size(), std::numeric_limits<Ordinal>::max()); 00091 TEST_ASSERT(rng.full_range()); 00092 TEST_ASSERT(!rng.in_range(-1)); 00093 TEST_ASSERT(rng.in_range(0)); 00094 TEST_ASSERT(rng.in_range(1)); 00095 TEST_ASSERT(rng.in_range(2)); 00096 TEST_ASSERT(rng.in_range(std::numeric_limits<Ordinal>::max()-1)); 00097 TEST_ASSERT(!rng.in_range(std::numeric_limits<Ordinal>::max())); 00098 } 00099 00100 00101 TEUCHOS_UNIT_TEST( Range1D, range_invalid ) 00102 { 00103 ECHO(Range1D rng(Range1D::INVALID)); 00104 TEST_EQUALITY_CONST(rng.lbound(), 0); 00105 TEST_EQUALITY_CONST(rng.ubound(), -2); 00106 TEST_EQUALITY_CONST(rng.size(), -1); 00107 TEST_ASSERT(!rng.full_range()); 00108 TEST_ASSERT(!rng.in_range(-1)); 00109 TEST_ASSERT(!rng.in_range(0)); 00110 TEST_ASSERT(!rng.in_range(1)); 00111 } 00112 00113 00114 TEUCHOS_UNIT_TEST( Range1D, range_0_m1 ) 00115 { 00116 ECHO(Range1D rng(0,-1)); 00117 TEST_EQUALITY_CONST(rng.lbound(), 0); 00118 TEST_EQUALITY_CONST(rng.ubound(), -1);; 00119 TEST_EQUALITY_CONST(rng.size(), 0); 00120 TEST_ASSERT(!rng.full_range()); 00121 TEST_ASSERT(!rng.in_range(-1)); 00122 TEST_ASSERT(!rng.in_range(0)); 00123 TEST_ASSERT(!rng.in_range(1)); 00124 } 00125 00126 00127 TEUCHOS_UNIT_TEST( Range1D, range_1_0 ) 00128 { 00129 ECHO(Range1D rng(1,0)); 00130 TEST_EQUALITY_CONST(rng.lbound(), 1); 00131 TEST_EQUALITY_CONST(rng.ubound(), 0);; 00132 TEST_EQUALITY_CONST(rng.size(), 0); 00133 TEST_ASSERT(!rng.full_range()); 00134 TEST_ASSERT(!rng.in_range(0)); 00135 TEST_ASSERT(!rng.in_range(1)); 00136 TEST_ASSERT(!rng.in_range(2)); 00137 } 00138 00139 00140 TEUCHOS_UNIT_TEST( Range1D, range_4_3 ) 00141 { 00142 ECHO(Range1D rng(4,3)); 00143 TEST_EQUALITY_CONST(rng.lbound(), 4); 00144 TEST_EQUALITY_CONST(rng.ubound(), 3); 00145 TEST_EQUALITY_CONST(rng.size(), 0); 00146 TEST_ASSERT(!rng.full_range()); 00147 TEST_ASSERT(!rng.in_range(2)); 00148 TEST_ASSERT(!rng.in_range(3)); 00149 TEST_ASSERT(!rng.in_range(4)); 00150 } 00151 00152 00153 TEUCHOS_UNIT_TEST( Range1D, equalityOp ) 00154 { 00155 00156 ECHO(Range1D rng1(0,1)); 00157 00158 TEST_EQUALITY(rng1, rng1); 00159 00160 ECHO(Range1D rng2(0,1)); 00161 TEST_EQUALITY(rng2, rng1); 00162 00163 ECHO(Range1D rng3(0,2)); 00164 TEST_INEQUALITY(rng3, rng1); 00165 00166 ECHO(Range1D rng4(1,2)); 00167 TEST_INEQUALITY(rng3, rng1); 00168 00169 ECHO(Range1D rng5 = rng4 - 1); 00170 TEST_EQUALITY(rng5, rng1); 00171 00172 } 00173 00174 00175 TEUCHOS_UNIT_TEST( Range1D, increment ) 00176 { 00177 ECHO(Range1D rng1(4,6)); 00178 TEST_EQUALITY_CONST(rng1.lbound(), 4); 00179 TEST_EQUALITY_CONST(rng1.ubound(), 6); 00180 00181 ECHO(rng1 += 3); 00182 TEST_EQUALITY_CONST(rng1.lbound(), 7); 00183 TEST_EQUALITY_CONST(rng1.ubound(), 9); 00184 00185 ECHO(rng1 -= 1); 00186 TEST_EQUALITY_CONST(rng1.lbound(), 6); 00187 TEST_EQUALITY_CONST(rng1.ubound(), 8); 00188 00189 ECHO(rng1 -= 6); 00190 TEST_EQUALITY_CONST(rng1.lbound(), 0); 00191 TEST_EQUALITY_CONST(rng1.ubound(), 2); 00192 00193 ECHO(Range1D rng2 = Range1D(2,3) + 4); 00194 TEST_EQUALITY_CONST(rng2.lbound(), 6); 00195 TEST_EQUALITY_CONST(rng2.ubound(), 7); 00196 00197 ECHO(Range1D rng2b = 4 + Range1D(2,3)); 00198 TEST_EQUALITY_CONST(rng2b.lbound(), 6); 00199 TEST_EQUALITY_CONST(rng2b.ubound(), 7); 00200 00201 ECHO(Range1D rng3 = Range1D(4,5) - 2); 00202 TEST_EQUALITY_CONST(rng3.lbound(), 2); 00203 TEST_EQUALITY_CONST(rng3.ubound(), 3); 00204 00205 ECHO(Range1D rng4 = Range1D(4,4) - 4); 00206 TEST_EQUALITY_CONST(rng4.lbound(), 0); 00207 TEST_EQUALITY_CONST(rng4.ubound(), 0); 00208 00209 ECHO(Range1D rng5 = Range1D(4,4) + (-4)); 00210 TEST_EQUALITY_CONST(rng5.lbound(), 0); 00211 TEST_EQUALITY_CONST(rng5.ubound(), 0); 00212 } 00213 00214 00215 #ifdef TEUCHOS_DEBUG 00216 00217 TEUCHOS_UNIT_TEST( Range1D, outOfRange ) 00218 { 00219 TEST_THROW(Range1D(-1,-1), std::out_of_range); 00220 TEST_THROW(Range1D(-1,1), std::out_of_range); 00221 TEST_THROW(Range1D(2,0), std::out_of_range); 00222 TEST_THROW(Range1D(3,0), std::out_of_range); 00223 TEST_THROW(Range1D(5,3), std::out_of_range); 00224 TEST_THROW(Range1D(0,0)-1, std::out_of_range); 00225 TEST_THROW(Range1D(0,0)+(-1), std::out_of_range); 00226 } 00227 00228 #endif // TEUCHOS_DEBUG 00229 00230 // ToDo: Test creating invalid ranges 00231 00232 // ToDo: Test invalid lower increment. 00233 00234 00235 00236 } // namespace
1.7.6.1