00001
00008
00009
00010
00011
00012
00013 #ifdef NDEBUG
00014 #undef NDEBUG
00015 #endif
00016 #ifdef ECL_NDEBUG
00017 #undef ECL_NDEBUG
00018 #endif
00019
00020
00021
00022
00023
00024 #include <iostream>
00025 #include <gtest/gtest.h>
00026
00027 #include "../../include/ecl/containers/array.hpp"
00028 #include <ecl/concepts/containers.hpp>
00029
00030
00031
00032
00033
00034 using ecl::StandardException;
00035 using ecl::Array;
00036 using ecl::Stencil;
00037 using ecl::UnsignedByteContainerConcept;
00038
00039
00040
00041
00042
00043 typedef Stencil< Array<int,5> > FixedStencil;
00044 typedef Stencil< Array<int> > DynamicStencil;
00045
00046
00047
00048
00049
00050 TEST(StencilTests,construction) {
00051
00052 Array<int,5> array;
00053 Array<int> darray(5);
00054 array << 1,2,3,4,5;
00055 darray << 6,7,8,9,10;
00056
00057 FixedStencil stencil = array.stencil(1,3);
00058 DynamicStencil dstencil(darray,darray.begin()+1,darray.begin()+4);
00059 EXPECT_EQ(2,stencil[0]);
00060 EXPECT_EQ(3,stencil[1]);
00061 EXPECT_EQ(4,stencil[2]);
00062 EXPECT_EQ(7,dstencil[0]);
00063 EXPECT_EQ(8,dstencil[1]);
00064 EXPECT_EQ(9,dstencil[2]);
00065 }
00066
00067 TEST(StencilTests,badConstruction) {
00068
00069 Array<int> darray(5);
00070 darray << 6,7,8,9,10;
00071
00072 bool result = false;
00073 try {
00074 DynamicStencil bad_stencil(darray,darray.begin()+1,darray.begin()+9);
00075 } catch ( StandardException &e ) {
00076 result = true;
00077 }
00078 EXPECT_TRUE(result);
00079 }
00080
00081 TEST(StencilTests,badIndexing) {
00082
00083 Array<int> darray(5);
00084 darray << 6,7,8,9,10;
00085
00086 DynamicStencil dstencil(darray,darray.begin()+1,darray.begin()+4);
00087 darray.resize(3);
00088 darray << 6,7,8;
00089 bool result = false;
00090 try {
00091 dstencil[2];
00092 dstencil[4];
00093 } catch ( StandardException &e ) {
00094 result = true;
00095 }
00096 EXPECT_TRUE(result);
00097 }
00098 TEST(StencilTests,modifying) {
00099 Array<int,5> array;
00100 Array<int> darray(5);
00101 array << 1,2,3,4,5;
00102 darray << 6,7,8,9,10;
00103 FixedStencil stencil = array.stencil(1,3);
00104 stencil.resettle(0,2);
00105 EXPECT_EQ(1,stencil[0]);
00106 EXPECT_EQ(2,stencil[1]);
00107 stencil = array.stencil(1,4);
00108 EXPECT_EQ(2,stencil[0]);
00109 EXPECT_EQ(3,stencil[1]);
00110 EXPECT_EQ(4,stencil[2]);
00111 EXPECT_EQ(5,stencil[3]);
00112 }
00113
00114 TEST(StencilTests,concepts) {
00115
00116 typedef Array<unsigned char,6> ByteArray;
00117 typedef Stencil<ByteArray> ByteStencil;
00118
00119
00120 ecl_compile_time_concept_check(UnsignedByteContainerConcept<ByteArray>);
00121 ecl_compile_time_concept_check(UnsignedByteContainerConcept<ByteStencil>);
00122 SUCCEED();
00123 }
00124
00125 TEST(StencilTests,byteStrings) {
00126
00127 std::string str("dude");
00128 Stencil<std::string> stencil( str, str.begin(), str.end() );
00129 EXPECT_EQ(4,stencil.size());
00130 EXPECT_EQ('d',stencil[0]);
00131 EXPECT_EQ('u',stencil[1]);
00132 EXPECT_EQ('d',stencil[2]);
00133 EXPECT_EQ('e',stencil[3]);
00134
00135
00136
00137
00138 SUCCEED();
00139 }
00140
00141
00142
00143
00144
00145
00146 int main(int argc, char **argv) {
00147 testing::InitGoogleTest(&argc,argv);
00148 return RUN_ALL_TESTS();
00149 }
00150
00151