@@ -125,6 +125,7 @@ struct CDenseFx {
125125 std::string expected_error = std::string());
126126 void reset_config ();
127127 void update_config ();
128+ void check_last_error (std::string expected_error);
128129
129130 CDenseFx ();
130131 ~CDenseFx ();
@@ -189,6 +190,16 @@ void CDenseFx::update_config() {
189190 tiledb_config_free (&config);
190191}
191192
193+ void CDenseFx::check_last_error (std::string expected_error) {
194+ tiledb_error_t * err = NULL ;
195+ tiledb_ctx_get_last_error (ctx_, &err);
196+ // Retrieve the error message by invoking `tiledb_error_message`.
197+ const char * msg;
198+ tiledb_error_message (err, &msg);
199+ CHECK_THAT (
200+ std::string (msg), Catch::Matchers::ContainsSubstring (expected_error));
201+ }
202+
192203void CDenseFx::create_default_array_1d () {
193204 int domain[] = {1 , 200 };
194205 int tile_extent = 10 ;
@@ -516,13 +527,7 @@ void CDenseFx::read(
516527 CHECK (rc == TILEDB_OK);
517528 } else {
518529 CHECK (rc == TILEDB_ERR);
519- tiledb_error_t * err = NULL ;
520- tiledb_ctx_get_last_error (ctx_, &err);
521-
522- // Retrieve the error message by invoking `tiledb_error_message`.
523- const char * msg;
524- tiledb_error_message (err, &msg);
525- CHECK (expected_error == std::string (msg));
530+ check_last_error (expected_error);
526531 }
527532
528533 // Check the internal loop count against expected value.
@@ -644,13 +649,7 @@ void CDenseFx::read_strings(
644649 CHECK (rc == TILEDB_OK);
645650 } else {
646651 CHECK (rc == TILEDB_ERR);
647- tiledb_error_t * err = NULL ;
648- tiledb_ctx_get_last_error (ctx_, &err);
649-
650- // Retrieve the error message by invoking `tiledb_error_message`.
651- const char * msg;
652- tiledb_error_message (err, &msg);
653- CHECK (expected_error == std::string (msg));
652+ check_last_error (expected_error);
654653 }
655654
656655 if (rc == TILEDB_OK) {
@@ -820,16 +819,7 @@ void CDenseFx::read_fixed_strings(
820819 CHECK (rc == TILEDB_OK);
821820 } else {
822821 CHECK (rc == TILEDB_ERR);
823-
824- if (rc == TILEDB_ERR) {
825- tiledb_error_t * err = NULL ;
826- tiledb_ctx_get_last_error (ctx_, &err);
827-
828- // Retrieve the error message by invoking `tiledb_error_message`.
829- const char * msg;
830- tiledb_error_message (err, &msg);
831- CHECK (expected_error == std::string (msg));
832- }
822+ check_last_error (expected_error);
833823 }
834824
835825 if (rc == TILEDB_OK) {
@@ -919,7 +909,8 @@ TEST_CASE_METHOD(
919909 data_r,
920910 &data_r_size,
921911 0 ,
922- " DenseReader: Cannot load tile offsets, increase memory budget" );
912+ " DenseReader: Cannot load tile offsets" );
913+ check_last_error (" increase memory budget" );
923914}
924915
925916TEST_CASE_METHOD (
@@ -979,16 +970,16 @@ TEST_CASE_METHOD(
979970 tile_upper_memory_limit_ = " 50" ;
980971 update_config ();
981972
982- std::string error_expected =
983- use_qc ?
984- " DenseReader: Cannot process a single tile because of query "
985- " condition, increase memory budget" :
986- " DenseReader: Cannot process a single tile, increase memory budget" ;
973+ std::string error_expected = use_qc ?
974+ " DenseReader: Cannot process a single tile "
975+ " because of query condition" :
976+ " DenseReader: Cannot process a single tile" ;
987977
988978 // Try to read.
989979 int data_r[20 ] = {0 };
990980 uint64_t data_r_size = sizeof (data_r);
991981 read (subarray, data_r, &data_r_size, use_qc, error_expected);
982+ check_last_error (" increase memory budget" );
992983}
993984
994985TEST_CASE_METHOD (
@@ -1063,10 +1054,9 @@ TEST_CASE_METHOD(
10631054 update_config ();
10641055
10651056 std::string error_expected =
1066- use_qc ?
1067- " DenseReader: Cannot process a single tile because of query "
1068- " condition, increase memory budget" :
1069- " DenseReader: Cannot process a single tile, increase memory budget" ;
1057+ use_qc ? " DenseReader: Cannot process a single tile because of query "
1058+ " condition" :
1059+ " DenseReader: Cannot process a single tile" ;
10701060
10711061 // Try to read.
10721062 char data_r[NUM_CELLS * 2 ] = {0 };
@@ -1081,6 +1071,7 @@ TEST_CASE_METHOD(
10811071 &offsets_r_size,
10821072 use_qc,
10831073 error_expected);
1074+ check_last_error (" increase memory budget" );
10841075}
10851076
10861077TEST_CASE_METHOD (
@@ -1243,7 +1234,8 @@ TEST_CASE_METHOD(
12431234 true ,
12441235 true ,
12451236 " DenseReader: Cannot process a single tile because of query "
1246- " condition, increase memory budget" );
1237+ " condition" );
1238+ check_last_error (" increase memory budget" );
12471239}
12481240
12491241TEST_CASE_METHOD (
@@ -1300,7 +1292,8 @@ TEST_CASE_METHOD(
13001292 0 ,
13011293 false ,
13021294 false ,
1303- " DenseReader: Cannot process a single tile, increase memory budget" );
1295+ " DenseReader: Cannot process a single tile" );
1296+ check_last_error (" increase memory budget" );
13041297
13051298 // Now read with QC set for a1 only.
13061299 read_fixed_strings (
@@ -1314,7 +1307,8 @@ TEST_CASE_METHOD(
13141307 0 ,
13151308 true ,
13161309 false ,
1317- " DenseReader: Cannot process a single tile, increase memory budget" );
1310+ " DenseReader: Cannot process a single tile" );
1311+ check_last_error (" increase memory budget" );
13181312
13191313 // Now read with QC set for a2 only.
13201314 read_fixed_strings (
@@ -1328,7 +1322,8 @@ TEST_CASE_METHOD(
13281322 0 ,
13291323 false ,
13301324 true ,
1331- " DenseReader: Cannot process a single tile, increase memory budget" );
1325+ " DenseReader: Cannot process a single tile" );
1326+ check_last_error (" increase memory budget" );
13321327
13331328 // Now read with QC set for a1 and a2, should fail.
13341329 read_fixed_strings (
@@ -1343,7 +1338,8 @@ TEST_CASE_METHOD(
13431338 true ,
13441339 true ,
13451340 " DenseReader: Cannot process a single tile because of query "
1346- " condition, increase memory budget" );
1341+ " condition" );
1342+ check_last_error (" increase memory budget" );
13471343}
13481344
13491345#define LARGE_NUM_CELLS 50
0 commit comments