@@ -225,6 +225,67 @@ void test_sparsevec_to_string() {
225225
226226void test_sparsevec_from_string () {
227227 assert (pqxx::from_string<pgvector::SparseVector>(" {1:1,3:2,5:3}/6" ) == pgvector::SparseVector ({1 , 0 , 2 , 0 , 3 , 0 }));
228+ assert (pqxx::from_string<pgvector::SparseVector>(" {}/6" ) == pgvector::SparseVector ({0 , 0 , 0 , 0 , 0 , 0 }));
229+
230+ try {
231+ auto unused = pqxx::from_string<pgvector::SparseVector>(" " );
232+ assert (false );
233+ } catch (const pqxx::conversion_error& e) {
234+ assert (std::string_view (e.what ()) == " Malformed sparsevec literal" );
235+ }
236+
237+ try {
238+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {" );
239+ assert (false );
240+ } catch (const pqxx::conversion_error& e) {
241+ assert (std::string_view (e.what ()) == " Malformed sparsevec literal" );
242+ }
243+
244+ try {
245+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {}/-1" );
246+ assert (false );
247+ } catch (const pqxx::conversion_error& e) {
248+ assert (std::string_view (e.what ()) == " Malformed sparsevec literal" );
249+ }
250+
251+ // TODO change to pqxx::conversion_error
252+ try {
253+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {:}/1" );
254+ assert (false );
255+ } catch (const std::invalid_argument& e) {
256+ assert (true );
257+ }
258+
259+ try {
260+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {,}/1" );
261+ assert (false );
262+ } catch (const pqxx::conversion_error& e) {
263+ assert (std::string_view (e.what ()) == " Malformed sparsevec literal" );
264+ }
265+
266+ // TODO change to pqxx::conversion_error
267+ try {
268+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {a:1}/1" );
269+ assert (false );
270+ } catch (const std::invalid_argument& e) {
271+ assert (true );
272+ }
273+
274+ // TODO change to pqxx::conversion_error
275+ try {
276+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {1:a}/1" );
277+ assert (false );
278+ } catch (const std::invalid_argument& e) {
279+ assert (true );
280+ }
281+
282+ // TODO change to pqxx::conversion_error
283+ try {
284+ auto unused = pqxx::from_string<pgvector::SparseVector>(" {}/a" );
285+ assert (false );
286+ } catch (const std::invalid_argument& e) {
287+ assert (true );
288+ }
228289}
229290
230291void test_pqxx () {
0 commit comments