Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Range1D_UnitTests.cpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines