public void ConvertIntegers()

        {
            AString a= new AString();
            int pos;
            int posOrig;

            // parse on empty
            a.Clear();
            {
                posOrig= pos= 0;
                UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
                posOrig= pos= -5;
                UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
            }

            // parse on non number
            a.Clear()._( "Hello");
            {
                posOrig= pos= 0;    UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
                posOrig= pos= -5;   UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
                posOrig= pos= 2;    UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
            }

            // check that leading whitespaces do not move pointer
            a.Clear()._( "   Hello");
            {
                posOrig= pos= 0;    UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
                posOrig= pos= -5;   UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
                posOrig= pos= 2;    UT_EQ(   0,  a.ToInt( posOrig, out pos )  );    UT_EQ( pos, posOrig );
            }

            // parse integers
            {
                a.Clear()._( "123456789");     UT_EQ( 123456789,  a.ToInt  ( 0, out pos ) );      UT_EQ(  0  + a.Length() , pos );
                a.Clear()._( "  123");         UT_EQ( 123,        a.ToInt  ( 0, out pos ) );      UT_EQ(  0  + a.Length() , pos );
                a.Clear()._( "  -23  ");       UT_EQ( -23,        a.ToInt  ( 0, out pos ) );      UT_EQ( -2  + a.Length() , pos );
                a.Clear()._(   "123  ");       UT_EQ( 123,        a.ToInt  ( 0, out pos ) );      UT_EQ( -2  + a.Length() , pos );

                a.Clear()._( "xxx123456789");  UT_EQ( 123456789,  a.ToInt  ( 3, out pos ) );      UT_EQ(  0  + a.Length() , pos );
                a.Clear()._( "xxx  123");      UT_EQ( 123,        a.ToInt  ( 3, out pos ) );      UT_EQ(  0  + a.Length() , pos );
                a.Clear()._( "xxx  123  ");    UT_EQ( 123,        a.ToInt  ( 3, out pos ) );      UT_EQ( -2  + a.Length() , pos );
                a.Clear()._(   "xxx123  ");    UT_EQ( 123,        a.ToInt  ( 3, out pos ) );      UT_EQ( -2  + a.Length() , pos );
            }

                                                                                                            // append int32
            {
                AString ms= new AString();

                uint ui;
                int   i;

                ms.Clear(); ui= 0;              ms._( ui     );   UT_EQ(                    "0",  ms );
                ms.Clear(); ui= 0;              ms._( ui, 1  );   UT_EQ(                    "0",  ms );
                ms.Clear(); ui= 0;              ms._( ui, 3  );   UT_EQ(                  "000",  ms );
                ms.Clear(); ui= 10;             ms._( ui     );   UT_EQ(                   "10",  ms );
                ms.Clear(); ui= 100;            ms._( ui, 1  );   UT_EQ(                  "100",  ms );
                ms.Clear(); ui= 100;            ms._( ui, 3  );   UT_EQ(                  "100",  ms );
                ms.Clear(); ui= 100;            ms._( ui, 4  );   UT_EQ(                 "0100",  ms );
                ms.Clear(); ui= 23;             ms._( ui     );   UT_EQ(                   "23",  ms );
                ms.Clear(); ui= 99;             ms._( ui, 5  );   UT_EQ(                "00099",  ms );
                ms.Clear();  i= 49;             ms._( i      );   UT_EQ(                   "49",  ms );
                ms.Clear();  i= -5;             ms._( i, 5   );   UT_EQ(               "-00005",  ms );
                ms.Clear();  i= -5324;          ms._( i, 2   );   UT_EQ(                "-5324",  ms );
                ms.Clear(); ui= uint.MaxValue;  ms._( ui     );   UT_EQ(           "4294967295",  ms );
                ms.Clear(); ui= uint.MinValue;  ms._( ui     );   UT_EQ(                    "0",  ms );
                ms.Clear();  i=  int.MaxValue;  ms._( i      );   UT_EQ(           "2147483647",  ms );
                ms.Clear();  i=  int.MinValue;  ms._( i      );   UT_EQ(          "-2147483648",  ms );
                ms.Clear(); ui= uint.MaxValue;  ms._( ui, 12 );   UT_EQ(         "004294967295",  ms );
                ms.Clear(); ui= uint.MinValue;  ms._( ui, 12 );   UT_EQ(         "000000000000",  ms );
                ms.Clear();  i=  int.MaxValue;  ms._( i , 12 );   UT_EQ(         "002147483647",  ms );
                ms.Clear();  i=  int.MinValue;  ms._( i , 12 );   UT_EQ(        "-002147483648",  ms );
            }

            // append int64
            {
                AString ms= new AString();

                ulong ui;
                 long  i;

                ms.Clear(); ui= 0;              ms._( ui     );   UT_EQ(                    "0",  ms );
                ms.Clear(); ui= 0;              ms._( ui, 1  );   UT_EQ(                    "0",  ms );
                ms.Clear(); ui= 0;              ms._( ui, 3  );   UT_EQ(                  "000",  ms );
                ms.Clear(); ui= 10;             ms._( ui     );   UT_EQ(                   "10",  ms );
                ms.Clear(); ui= 100;            ms._( ui, 1  );   UT_EQ(                  "100",  ms );
                ms.Clear(); ui= 100;            ms._( ui, 3  );   UT_EQ(                  "100",  ms );
                ms.Clear(); ui= 100;            ms._( ui, 4  );   UT_EQ(                 "0100",  ms );
                ms.Clear(); ui= 23;             ms._( ui     );   UT_EQ(                   "23",  ms );
                ms.Clear(); ui= 99;             ms._( ui, 5  );   UT_EQ(                "00099",  ms );
                ms.Clear();  i= 49;             ms._( i      );   UT_EQ(                   "49",  ms );
                ms.Clear();  i= -5;             ms._( i, 5   );   UT_EQ(               "-00005",  ms );
                ms.Clear();  i= -5324;          ms._( i, 2   );   UT_EQ(                "-5324",  ms );
                ms.Clear(); ui= uint.MaxValue;  ms._( ui     );   UT_EQ(           "4294967295",  ms );
                ms.Clear(); ui= uint.MinValue;  ms._( ui     );   UT_EQ(                    "0",  ms );
                ms.Clear();  i= int.MaxValue;   ms._( i      );   UT_EQ(           "2147483647",  ms );
                ms.Clear();  i= int.MinValue;   ms._( i      );   UT_EQ(          "-2147483648",  ms );
                ms.Clear(); ui= uint.MaxValue;  ms._( ui, 12 );   UT_EQ(         "004294967295",  ms );
                ms.Clear(); ui= uint.MinValue;  ms._( ui, 12 );   UT_EQ(         "000000000000",  ms );
                ms.Clear();  i= int.MaxValue;   ms._( i , 12 );   UT_EQ(         "002147483647",  ms );
                ms.Clear();  i= int.MinValue;   ms._( i , 12 );   UT_EQ(        "-002147483648",  ms );

                ms.Clear(); ui= ulong.MaxValue; ms._( ui     );   UT_EQ( "18446744073709551615",  ms );
                ms.Clear(); ui= ulong.MinValue; ms._( ui     );   UT_EQ(                    "0",  ms );
                ms.Clear();  i= long.MaxValue;  ms._( i      );   UT_EQ(  "9223372036854775807",  ms );
                ms.Clear(); ms.SetBuffer(20);
                             i= long.MinValue;  ms._( i      );   UT_EQ( "-9223372036854775808",  ms );
                ms.Clear();  i= long.MinValue
                                + 75008;        ms._( i      );   UT_EQ( "-9223372036854700800",  ms );
            }

        }