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)23 main( 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