@@ -2162,6 +2162,51 @@ namespace nfx::datatypes::test
21622162 EXPECT_FALSE ( datatypes::Int128::fromString ( " 1e10" , result ) );
21632163 }
21642164
2165+ TEST ( Int128StringParsing, CStringConstruction )
2166+ {
2167+ // Valid C-strings - tests const char* constructor
2168+ const char * str1 = " 12345" ;
2169+ datatypes::Int128 i1{ str1 };
2170+ EXPECT_EQ ( 12345ULL , i1.toLow () );
2171+ EXPECT_FALSE ( i1 < 0 );
2172+
2173+ const char * str2 = " -9876543210" ;
2174+ datatypes::Int128 i2{ str2 };
2175+ EXPECT_TRUE ( i2 < 0 );
2176+
2177+ const char * str3 = " 0" ;
2178+ datatypes::Int128 i3{ str3 };
2179+ EXPECT_TRUE ( i3 == 0 );
2180+
2181+ const char * str4 = " 123456789012345678901234567890" ;
2182+ datatypes::Int128 i4{ str4 };
2183+ EXPECT_FALSE ( i4 == 0 );
2184+ EXPECT_FALSE ( i4 < 0 );
2185+
2186+ const char * str5 = " -123456789012345678901234567890" ;
2187+ datatypes::Int128 i5{ str5 };
2188+ EXPECT_TRUE ( i5 < 0 );
2189+
2190+ const char * str6 = " +42" ;
2191+ datatypes::Int128 i6{ str6 };
2192+ EXPECT_EQ ( 42ULL , i6.toLow () );
2193+ EXPECT_FALSE ( i6 < 0 );
2194+
2195+ // Test invalid C-string throws exception
2196+ const char * invalid1 = " abc" ;
2197+ EXPECT_THROW ( datatypes::Int128{ invalid1 }, std::invalid_argument );
2198+
2199+ const char * invalid2 = " 123abc" ;
2200+ EXPECT_THROW ( datatypes::Int128{ invalid2 }, std::invalid_argument );
2201+
2202+ const char * invalid3 = " 12.34" ;
2203+ EXPECT_THROW ( datatypes::Int128{ invalid3 }, std::invalid_argument );
2204+
2205+ // Test empty string throws exception
2206+ const char * empty = " " ;
2207+ EXPECT_THROW ( datatypes::Int128{ empty }, std::invalid_argument );
2208+ }
2209+
21652210 TEST ( Int128StringParsing, ParseMethod )
21662211 {
21672212 // Valid positive parsing
0 commit comments