1 // 2 // sc_MultiTypeValue.cpp 3 // 4 5 #include <cassert> 6 7 #ifdef HAVE_ISO_HEADERS 8 #include <iostream> 9 #else 10 #include <iostream> 11 #endif 12 13 14 15 using namespace std; 16 17 18 19 #include <sdts++/container/sc_MultiTypeValue.h> 20 21 22 int main(int argc,char ** argv)23main( int argc, char** argv ) 24 { 25 26 sc_MultiTypeValue mtv; 27 28 long long_val; 29 unsigned long ulong_val; 30 string string_val; 31 32 // test initial state as being null 33 34 assert( ! mtv.getLong( long_val ) ); 35 36 37 // test set and get 38 39 mtv.setLong( 42 ); 40 41 assert( mtv.getLong( long_val ) ); 42 43 assert( 42 == long_val ); 44 45 46 // test pedantic get (i.e., trying to get a value of the wrong type 47 48 // XXX This function has changed 49 // behaviour; now this returns true if 50 // the multivalue type is a signed 51 // integer. It will convert to an 52 // unsigned and return that value if 53 // this is the case. I had to do this 54 // because the sc_Subfield::is_I is 55 // blind to signed and unsigned types. 56 // There was no way a priori to know 57 // what type I was dealing with. 58 59 assert( mtv.getUnsignedLong( ulong_val ) ); 60 61 62 // test setting to different type and getting a value of that type 63 64 mtv.setUnsignedLong( 24 ); 65 66 assert( mtv.getUnsignedLong( ulong_val ) ); 67 68 assert( 24 == ulong_val ); 69 70 71 // string testing 72 73 mtv.setString( "FOO" ); 74 75 assert( mtv.getString( string_val ) ); 76 77 assert( "FOO" == string_val ); 78 79 assert( ! mtv.getUnsignedLong( ulong_val ) ); // can't get long from string 80 81 82 // copy ctor test 83 84 { 85 sc_MultiTypeValue local_mtv( mtv ); 86 string my_val; 87 88 assert( local_mtv.getString( my_val ) ); 89 90 assert( "FOO" == my_val ); 91 92 assert( ! local_mtv.getUnsignedLong( ulong_val ) ); 93 } 94 95 96 // assignment operator test 97 98 { 99 sc_MultiTypeValue local_mtv; 100 string my_val; 101 102 local_mtv = mtv; 103 104 assert( local_mtv.getString( my_val ) ); 105 106 assert( "FOO" == my_val ); 107 108 assert( ! local_mtv.getUnsignedLong( ulong_val ) ); 109 } 110 111 112 // null reset test 113 114 mtv.setNull(); 115 116 assert( ! mtv.getString( string_val ) ); 117 118 119 // done! 120 121 exit( 0 ); 122 } 123