1 /** 2 * 3 * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU) 4 * info_at_agrum_dot_org 5 * 6 * This library is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with this library. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 22 #include <gumtest/AgrumTestSuite.h> 23 #include <gumtest/testsuite_utils.h> 24 #include <ressources/include/countedAlloc.h> 25 #include <ressources/include/poolAlloc.h> 26 #include <iostream> 27 28 #include <agrum/tools/core/thread.h> 29 #include <agrum/tools/database/DBTranslator4RangeVariable.h> 30 31 namespace gum_tests { 32 33 class DBTranslator4RangeVariableTestSuite: public CxxTest::TestSuite { 34 public: test_trans1()35 void test_trans1() { 36 gum::learning::DBTranslator4RangeVariable<> translator; 37 TS_ASSERT(translator.isLossless()) 38 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("3")); 39 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)0) 40 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 41 "3"); 42 43 TS_ASSERT_EQUALS(translator.missingValue().discr_val, 44 std::numeric_limits< std::size_t >::max()); 45 46 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("5")); 47 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)2) 48 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 49 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 50 "3"); 51 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 52 "4"); 53 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 54 "5"); 55 56 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("1")); 57 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)3) 58 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)4) 59 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 60 "1"); 61 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 62 "2"); 63 64 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("-1")); 65 TS_ASSERT_EQUALS(translator.translate("-1").discr_val, (std::size_t)5) 66 TS_ASSERT_EQUALS(translator.translate("0").discr_val, (std::size_t)6) 67 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)3) 68 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)4) 69 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)0) 70 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 71 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)2) 72 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 73 "3"); 74 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 75 "4"); 76 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 77 "5"); 78 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 79 "1"); 80 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 81 "2"); 82 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 83 "-1"); 84 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{6}}), 85 "0"); 86 87 std::vector< std::string > missing{"2", "N/A", "20", "4", "xxx"}; 88 89 gum::learning::DBTranslator4RangeVariable<> translator2(missing); 90 TS_ASSERT_EQUALS(translator2.translate("3").discr_val, (std::size_t)0) 91 TS_ASSERT_EQUALS(translator2.translate("2").discr_val, 92 std::numeric_limits< std::size_t >::max()); 93 TS_ASSERT(translator2.translate("N/A").discr_val 94 == std::numeric_limits< std::size_t >::max()); 95 TS_ASSERT(translator2.translate("xxx").discr_val 96 == std::numeric_limits< std::size_t >::max()); 97 TS_ASSERT_THROWS(translator2.translate("yyy"), gum::TypeError) 98 TS_ASSERT_THROWS(translator2.translate("1"), gum::OperationNotAllowed) 99 TS_ASSERT_EQUALS(translator2.translate("5").discr_val, (std::size_t)2) 100 TS_ASSERT_EQUALS(translator2.translate("4").discr_val, (std::size_t)1) 101 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 102 "3"); 103 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 104 "4"); 105 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 106 "5"); 107 108 gum::Set< std::string > possible_translated_miss{"N/A", "xxx"}; 109 TS_ASSERT(possible_translated_miss.exists(translator2.translateBack( 110 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}))); 111 TS_ASSERT_EQUALS(translator2.needsReordering(), false) 112 const auto new_order = translator2.reorder(); 113 TS_ASSERT_EQUALS(new_order.size(), (gum::Size)0) 114 115 gum::RangeVariable var("X2", "", 2, 3); 116 gum::learning::DBTranslator4RangeVariable<> translator3(var, missing, true); 117 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)0) 118 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)3) 119 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)2) 120 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)4) 121 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)5) 122 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 123 "2"); 124 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 125 "3"); 126 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 127 "4"); 128 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 129 "5"); 130 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 131 "0"); 132 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 133 "1"); 134 TS_ASSERT(translator3.needsReordering()) 135 const auto new_order3 = translator3.reorder(); 136 TS_ASSERT_EQUALS(new_order3[0], (std::size_t)2) 137 TS_ASSERT_EQUALS(new_order3[1], (std::size_t)3) 138 TS_ASSERT_EQUALS(new_order3[2], (std::size_t)4) 139 TS_ASSERT_EQUALS(new_order3[3], (std::size_t)5) 140 TS_ASSERT_EQUALS(new_order3[4], (std::size_t)0) 141 TS_ASSERT_EQUALS(new_order3[5], (std::size_t)1) 142 143 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)0) 144 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)1) 145 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)2) 146 TS_ASSERT_EQUALS(translator3.translate("3").discr_val, (std::size_t)3) 147 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)4) 148 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)5) 149 150 151 std::vector< std::string > missing2; 152 gum::learning::DBTranslator4RangeVariable<> translator4(var, missing2, true, 3); 153 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)0) 154 TS_ASSERT_THROWS(translator4.translate("5"), gum::SizeError) 155 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 156 TS_ASSERT_THROWS(translator4.translate("0"), gum::SizeError) 157 TS_ASSERT_THROWS(translator4.translate("1"), gum::SizeError) 158 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 159 "2"); 160 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 161 "3"); 162 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 163 "4"); 164 TS_ASSERT_THROWS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 165 gum::UnknownLabelInDatabase); 166 } 167 168 test_trans2()169 void test_trans2() { 170 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator; 171 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("3")); 172 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)0) 173 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 174 "3"); 175 176 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("5")); 177 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)2) 178 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 179 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 180 "3"); 181 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 182 "4"); 183 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 184 "5"); 185 186 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("1")); 187 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)3) 188 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)4) 189 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 190 "1"); 191 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 192 "2"); 193 194 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("-1")); 195 TS_ASSERT_EQUALS(translator.translate("-1").discr_val, (std::size_t)5) 196 TS_ASSERT_EQUALS(translator.translate("0").discr_val, (std::size_t)6) 197 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)3) 198 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)4) 199 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)0) 200 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 201 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)2) 202 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 203 "3"); 204 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 205 "4"); 206 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 207 "5"); 208 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 209 "1"); 210 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 211 "2"); 212 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 213 "-1"); 214 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{6}}), 215 "0"); 216 217 std::vector< std::string > missing{"2", "N/A", "20", "4", "xxx"}; 218 219 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator2(missing); 220 TS_ASSERT_EQUALS(translator2.translate("3").discr_val, (std::size_t)0) 221 TS_ASSERT_EQUALS(translator2.translate("2").discr_val, 222 std::numeric_limits< std::size_t >::max()); 223 TS_ASSERT(translator2.translate("N/A").discr_val 224 == std::numeric_limits< std::size_t >::max()); 225 TS_ASSERT(translator2.translate("xxx").discr_val 226 == std::numeric_limits< std::size_t >::max()); 227 TS_ASSERT_THROWS(translator2.translate("yyy"), gum::TypeError) 228 TS_ASSERT_THROWS(translator2.translate("1"), gum::OperationNotAllowed) 229 TS_ASSERT_EQUALS(translator2.translate("5").discr_val, (std::size_t)2) 230 TS_ASSERT_EQUALS(translator2.translate("4").discr_val, (std::size_t)1) 231 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 232 "3"); 233 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 234 "4"); 235 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 236 "5"); 237 238 gum::Set< std::string > possible_translated_miss{"N/A", "xxx"}; 239 TS_ASSERT(possible_translated_miss.exists(translator2.translateBack( 240 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}))); 241 TS_ASSERT_EQUALS(translator2.needsReordering(), false) 242 const auto new_order = translator2.reorder(); 243 TS_ASSERT_EQUALS(new_order.size(), (gum::Size)0) 244 245 gum::RangeVariable var("X2", "", 2, 3); 246 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator3(var, 247 missing, 248 true); 249 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)0) 250 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)3) 251 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)2) 252 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)4) 253 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)5) 254 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 255 "2"); 256 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 257 "3"); 258 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 259 "4"); 260 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 261 "5"); 262 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 263 "0"); 264 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 265 "1"); 266 TS_ASSERT(translator3.needsReordering()) 267 const auto new_order3 = translator3.reorder(); 268 TS_ASSERT_EQUALS(new_order3[0], (std::size_t)2) 269 TS_ASSERT_EQUALS(new_order3[1], (std::size_t)3) 270 TS_ASSERT_EQUALS(new_order3[2], (std::size_t)4) 271 TS_ASSERT_EQUALS(new_order3[3], (std::size_t)5) 272 TS_ASSERT_EQUALS(new_order3[4], (std::size_t)0) 273 TS_ASSERT_EQUALS(new_order3[5], (std::size_t)1) 274 275 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)0) 276 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)1) 277 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)2) 278 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)4) 279 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)5) 280 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 281 "0"); 282 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 283 "1"); 284 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 285 "2"); 286 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 287 "3"); 288 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 289 "4"); 290 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 291 "5"); 292 293 294 std::vector< std::string > missing2; 295 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator4(var, 296 missing2, 297 true, 298 3); 299 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)0) 300 TS_ASSERT_THROWS(translator4.translate("5"), gum::SizeError) 301 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 302 TS_ASSERT_THROWS(translator4.translate("0"), gum::SizeError) 303 TS_ASSERT_THROWS(translator4.translate("1"), gum::SizeError) 304 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 305 "2"); 306 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 307 "3"); 308 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 309 "4"); 310 TS_ASSERT_THROWS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 311 gum::UnknownLabelInDatabase); 312 } 313 314 test_trans4()315 void test_trans4() { 316 { 317 gum::RangeVariable var("X1", "", 2, 3); 318 319 std::vector< std::string > missing; 320 gum::learning::DBTranslator4RangeVariable<> translator(var, missing, true); 321 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)0) 322 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)3) 323 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)2) 324 TS_ASSERT_EQUALS(translator.translate("0").discr_val, (std::size_t)4) 325 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)5) 326 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 327 "2"); 328 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 329 "3"); 330 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 331 "4"); 332 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 333 "5"); 334 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 335 "0"); 336 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 337 "1"); 338 TS_ASSERT(translator.needsReordering()) 339 const auto new_order = translator.reorder(); 340 TS_ASSERT_EQUALS(new_order[0], (std::size_t)2) 341 TS_ASSERT_EQUALS(new_order[1], (std::size_t)3) 342 TS_ASSERT_EQUALS(new_order[2], (std::size_t)4) 343 TS_ASSERT_EQUALS(new_order[3], (std::size_t)5) 344 TS_ASSERT_EQUALS(new_order[4], (std::size_t)0) 345 TS_ASSERT_EQUALS(new_order[5], (std::size_t)1) 346 TS_ASSERT_EQUALS(translator.variable()->toString(), "X1:Range([0,5])") 347 348 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator2(var, 349 missing, 350 true); 351 TS_ASSERT_EQUALS(translator2.translate("2").discr_val, (std::size_t)0) 352 TS_ASSERT_EQUALS(translator2.translate("5").discr_val, (std::size_t)3) 353 TS_ASSERT_EQUALS(translator2.translate("4").discr_val, (std::size_t)2) 354 TS_ASSERT_EQUALS(translator2.translate("0").discr_val, (std::size_t)4) 355 TS_ASSERT_EQUALS(translator2.translate("1").discr_val, (std::size_t)5) 356 TS_ASSERT_EQUALS( 357 translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 358 "2"); 359 TS_ASSERT_EQUALS( 360 translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 361 "3"); 362 TS_ASSERT_EQUALS( 363 translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 364 "4"); 365 TS_ASSERT_EQUALS( 366 translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 367 "5"); 368 TS_ASSERT_EQUALS( 369 translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 370 "0"); 371 TS_ASSERT_EQUALS( 372 translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 373 "1"); 374 TS_ASSERT(translator2.needsReordering()) 375 const auto new_order2 = translator2.reorder(); 376 TS_ASSERT_EQUALS(new_order2[0], (std::size_t)2) 377 TS_ASSERT_EQUALS(new_order2[1], (std::size_t)3) 378 TS_ASSERT_EQUALS(new_order2[2], (std::size_t)4) 379 TS_ASSERT_EQUALS(new_order2[3], (std::size_t)5) 380 TS_ASSERT_EQUALS(new_order2[4], (std::size_t)0) 381 TS_ASSERT_EQUALS(new_order2[5], (std::size_t)1) 382 TS_ASSERT_EQUALS(translator2.variable()->toString(), "X1:Range([0,5])") 383 384 gum::learning::DBTranslator4RangeVariable<> translator3( 385 translator, 386 std::allocator< gum::learning::DBTranslatedValue >()); 387 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)0) 388 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)1) 389 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)2) 390 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)4) 391 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)5) 392 TS_ASSERT_EQUALS( 393 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 394 "0"); 395 TS_ASSERT_EQUALS( 396 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 397 "1"); 398 TS_ASSERT_EQUALS( 399 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 400 "2"); 401 TS_ASSERT_EQUALS( 402 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 403 "3"); 404 TS_ASSERT_EQUALS( 405 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 406 "4"); 407 TS_ASSERT_EQUALS( 408 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 409 "5"); 410 411 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator4( 412 translator2, 413 DebugCountedAlloc< gum::learning::DBTranslatedValue >()); 414 TS_ASSERT_EQUALS(translator4.translate("0").discr_val, (std::size_t)0) 415 TS_ASSERT_EQUALS(translator4.translate("1").discr_val, (std::size_t)1) 416 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)2) 417 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)4) 418 TS_ASSERT_EQUALS(translator4.translate("5").discr_val, (std::size_t)5) 419 TS_ASSERT_EQUALS( 420 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 421 "0"); 422 TS_ASSERT_EQUALS( 423 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 424 "1"); 425 TS_ASSERT_EQUALS( 426 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 427 "2"); 428 TS_ASSERT_EQUALS( 429 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 430 "3"); 431 TS_ASSERT_EQUALS( 432 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 433 "4"); 434 TS_ASSERT_EQUALS( 435 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 436 "5"); 437 438 gum::learning::DBTranslator4RangeVariable<> translator5(std::move(translator3)); 439 TS_ASSERT_EQUALS(translator5.translate("0").discr_val, (std::size_t)0) 440 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)1) 441 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)2) 442 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)4) 443 TS_ASSERT_EQUALS(translator5.translate("5").discr_val, (std::size_t)5) 444 TS_ASSERT_EQUALS( 445 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 446 "0"); 447 TS_ASSERT_EQUALS( 448 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 449 "1"); 450 TS_ASSERT_EQUALS( 451 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 452 "2"); 453 TS_ASSERT_EQUALS( 454 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 455 "3"); 456 TS_ASSERT_EQUALS( 457 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 458 "4"); 459 TS_ASSERT_EQUALS( 460 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 461 "5"); 462 463 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > translator6( 464 std::move(translator4)); 465 TS_ASSERT_EQUALS(translator6.translate("0").discr_val, (std::size_t)0) 466 TS_ASSERT_EQUALS(translator6.translate("1").discr_val, (std::size_t)1) 467 TS_ASSERT_EQUALS(translator6.translate("2").discr_val, (std::size_t)2) 468 TS_ASSERT_EQUALS(translator6.translate("4").discr_val, (std::size_t)4) 469 TS_ASSERT_EQUALS(translator6.translate("5").discr_val, (std::size_t)5) 470 TS_ASSERT_EQUALS( 471 translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 472 "0"); 473 TS_ASSERT_EQUALS( 474 translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 475 "1"); 476 TS_ASSERT_EQUALS( 477 translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 478 "2"); 479 TS_ASSERT_EQUALS( 480 translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 481 "3"); 482 TS_ASSERT_EQUALS( 483 translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 484 "4"); 485 TS_ASSERT_EQUALS( 486 translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 487 "5"); 488 489 gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc >* translator7 490 = translator6.clone(); 491 TS_ASSERT_EQUALS(translator7->translate("0").discr_val, (std::size_t)0) 492 TS_ASSERT_EQUALS(translator7->translate("1").discr_val, (std::size_t)1) 493 TS_ASSERT_EQUALS(translator7->translate("2").discr_val, (std::size_t)2) 494 TS_ASSERT_EQUALS(translator7->translate("4").discr_val, (std::size_t)4) 495 TS_ASSERT_EQUALS(translator7->translate("5").discr_val, (std::size_t)5) 496 TS_ASSERT_EQUALS( 497 translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 498 "0"); 499 TS_ASSERT_EQUALS( 500 translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 501 "1"); 502 TS_ASSERT_EQUALS( 503 translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 504 "2"); 505 TS_ASSERT_EQUALS( 506 translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 507 "3"); 508 TS_ASSERT_EQUALS( 509 translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 510 "4"); 511 TS_ASSERT_EQUALS( 512 translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 513 "5"); 514 515 DebugCountedAlloc< gum::learning::DBTranslator4RangeVariable< DebugCountedAlloc > > 516 allocator(translator7->getAllocator()); 517 allocator.destroy(translator7); 518 allocator.deallocate(translator7, 1); 519 520 translator4 = translator6; 521 TS_ASSERT_EQUALS(translator4.translate("0").discr_val, (std::size_t)0) 522 TS_ASSERT_EQUALS(translator4.translate("1").discr_val, (std::size_t)1) 523 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)2) 524 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)4) 525 TS_ASSERT_EQUALS(translator4.translate("5").discr_val, (std::size_t)5) 526 TS_ASSERT_EQUALS( 527 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 528 "0"); 529 TS_ASSERT_EQUALS( 530 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 531 "1"); 532 TS_ASSERT_EQUALS( 533 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 534 "2"); 535 TS_ASSERT_EQUALS( 536 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 537 "3"); 538 TS_ASSERT_EQUALS( 539 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 540 "4"); 541 TS_ASSERT_EQUALS( 542 translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 543 "5"); 544 545 translator3 = translator5; 546 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)0) 547 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)1) 548 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)2) 549 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)4) 550 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)5) 551 TS_ASSERT_EQUALS( 552 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 553 "0"); 554 TS_ASSERT_EQUALS( 555 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 556 "1"); 557 TS_ASSERT_EQUALS( 558 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 559 "2"); 560 TS_ASSERT_EQUALS( 561 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 562 "3"); 563 TS_ASSERT_EQUALS( 564 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 565 "4"); 566 TS_ASSERT_EQUALS( 567 translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 568 "5"); 569 570 translator5 = std::move(translator3); 571 TS_ASSERT_EQUALS(translator5.translate("0").discr_val, (std::size_t)0) 572 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)1) 573 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)2) 574 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)4) 575 TS_ASSERT_EQUALS(translator5.translate("5").discr_val, (std::size_t)5) 576 TS_ASSERT_EQUALS( 577 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 578 "0"); 579 TS_ASSERT_EQUALS( 580 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 581 "1"); 582 TS_ASSERT_EQUALS( 583 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 584 "2"); 585 TS_ASSERT_EQUALS( 586 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 587 "3"); 588 TS_ASSERT_EQUALS( 589 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 590 "4"); 591 TS_ASSERT_EQUALS( 592 translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 593 "5"); 594 } 595 596 TS_ASSERT_EQUALS(CountedAlloc::hasMemoryLeak(), false) 597 } 598 599 xtest_trans5()600 void xtest_trans5() { 601 LearningAlloc< double > alloc(10000); 602 gum::learning::DBTranslator4RangeVariable< LearningAlloc > translator(1000, alloc); 603 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("3")); 604 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)0) 605 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 606 "3"); 607 608 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("5")); 609 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)2) 610 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 611 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 612 "3"); 613 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 614 "4"); 615 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 616 "5"); 617 618 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("1")); 619 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)3) 620 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)4) 621 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 622 "1"); 623 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 624 "2"); 625 626 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("-1")); 627 TS_ASSERT_EQUALS(translator.translate("-1").discr_val, (std::size_t)5) 628 TS_ASSERT_EQUALS(translator.translate("0").discr_val, (std::size_t)6) 629 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)3) 630 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)4) 631 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)0) 632 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 633 TS_ASSERT_EQUALS(translator.translate("5").discr_val, (std::size_t)2) 634 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 635 "3"); 636 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 637 "4"); 638 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 639 "5"); 640 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 641 "1"); 642 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 643 "2"); 644 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 645 "-1"); 646 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{6}}), 647 "0"); 648 649 const auto& allocator = translator.getAllocator(); 650 TS_ASSERT_EQUALS(allocator, alloc) 651 652 std::vector< std::string > missing{"2", "N/A", "20", "4", "xxx"}; 653 654 gum::learning::DBTranslator4RangeVariable< LearningAlloc > translator2(missing); 655 TS_ASSERT_EQUALS(translator2.translate("3").discr_val, (std::size_t)0) 656 TS_ASSERT_EQUALS(translator2.translate("2").discr_val, 657 std::numeric_limits< std::size_t >::max()); 658 TS_ASSERT(translator2.translate("N/A").discr_val 659 == std::numeric_limits< std::size_t >::max()); 660 TS_ASSERT(translator2.translate("xxx").discr_val 661 == std::numeric_limits< std::size_t >::max()); 662 TS_ASSERT_THROWS(translator2.translate("yyy"), gum::TypeError) 663 TS_ASSERT_THROWS(translator2.translate("1"), gum::OperationNotAllowed) 664 TS_ASSERT_EQUALS(translator2.translate("5").discr_val, (std::size_t)2) 665 TS_ASSERT_EQUALS(translator2.translate("4").discr_val, (std::size_t)1) 666 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 667 "3"); 668 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 669 "4"); 670 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 671 "5"); 672 673 gum::Set< std::string > possible_translated_miss{"N/A", "xxx"}; 674 TS_ASSERT(possible_translated_miss.exists(translator2.translateBack( 675 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}))); 676 TS_ASSERT_EQUALS(translator2.needsReordering(), false) 677 const auto new_order = translator2.reorder(); 678 TS_ASSERT_EQUALS(new_order[0], (std::size_t)0) 679 TS_ASSERT_EQUALS(new_order[1], (std::size_t)1) 680 TS_ASSERT_EQUALS(new_order[2], (std::size_t)2) 681 682 gum::RangeVariable var("X2", "", 2, 3); 683 gum::learning::DBTranslator4RangeVariable< LearningAlloc > translator3(var, missing, true); 684 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)0) 685 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)3) 686 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)2) 687 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)4) 688 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)5) 689 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 690 "2"); 691 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 692 "3"); 693 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 694 "4"); 695 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 696 "5"); 697 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 698 "0"); 699 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 700 "1"); 701 TS_ASSERT(translator3.needsReordering()) 702 const auto new_order3 = translator3.reorder(); 703 TS_ASSERT_EQUALS(new_order3[0], (std::size_t)2) 704 TS_ASSERT_EQUALS(new_order3[1], (std::size_t)3) 705 TS_ASSERT_EQUALS(new_order3[2], (std::size_t)4) 706 TS_ASSERT_EQUALS(new_order3[3], (std::size_t)5) 707 TS_ASSERT_EQUALS(new_order3[4], (std::size_t)0) 708 TS_ASSERT_EQUALS(new_order3[5], (std::size_t)1) 709 710 std::vector< std::string > missing2; 711 gum::learning::DBTranslator4RangeVariable< LearningAlloc > translator4(var, 712 missing2, 713 true, 714 3); 715 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)0) 716 TS_ASSERT_THROWS(translator4.translate("5"), gum::SizeError) 717 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 718 TS_ASSERT_THROWS(translator4.translate("0"), gum::SizeError) 719 TS_ASSERT_THROWS(translator4.translate("1"), gum::SizeError) 720 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 721 "2"); 722 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 723 "3"); 724 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 725 "4"); 726 TS_ASSERT_THROWS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 727 gum::UnknownLabelInDatabase); 728 729 translator4 = translator3; 730 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)0) 731 TS_ASSERT_EQUALS(translator4.translate("5").discr_val, (std::size_t)3) 732 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 733 TS_ASSERT_EQUALS(translator4.translate("0").discr_val, (std::size_t)4) 734 TS_ASSERT_EQUALS(translator4.translate("1").discr_val, (std::size_t)5) 735 736 translator4 = std::move(translator3); 737 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)0) 738 TS_ASSERT_EQUALS(translator4.translate("5").discr_val, (std::size_t)3) 739 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 740 TS_ASSERT_EQUALS(translator4.translate("0").discr_val, (std::size_t)4) 741 TS_ASSERT_EQUALS(translator4.translate("1").discr_val, (std::size_t)5) 742 743 gum::learning::DBTranslator4RangeVariable< LearningAlloc > translator5(translator); 744 TS_ASSERT_EQUALS(translator5.translate("-1").discr_val, (std::size_t)5) 745 TS_ASSERT_EQUALS(translator5.translate("0").discr_val, (std::size_t)6) 746 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)3) 747 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)4) 748 TS_ASSERT_EQUALS(translator5.translate("3").discr_val, (std::size_t)0) 749 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)1) 750 TS_ASSERT_EQUALS(translator5.translate("5").discr_val, (std::size_t)2) 751 752 gum::learning::DBTranslator4RangeVariable< LearningAlloc > translator6(std::move(translator)); 753 TS_ASSERT_EQUALS(translator6.translate("-1").discr_val, (std::size_t)5) 754 TS_ASSERT_EQUALS(translator6.translate("0").discr_val, (std::size_t)6) 755 TS_ASSERT_EQUALS(translator6.translate("1").discr_val, (std::size_t)3) 756 TS_ASSERT_EQUALS(translator6.translate("2").discr_val, (std::size_t)4) 757 TS_ASSERT_EQUALS(translator6.translate("3").discr_val, (std::size_t)0) 758 TS_ASSERT_EQUALS(translator6.translate("4").discr_val, (std::size_t)1) 759 TS_ASSERT_EQUALS(translator6.translate("5").discr_val, (std::size_t)2) 760 761 gum::learning::DBTranslator4RangeVariable< LearningAlloc >* translator7 = translator6.clone(); 762 TS_ASSERT_EQUALS(translator7->translate("-1").discr_val, (std::size_t)5) 763 TS_ASSERT_EQUALS(translator7->translate("0").discr_val, (std::size_t)6) 764 TS_ASSERT_EQUALS(translator7->translate("1").discr_val, (std::size_t)3) 765 TS_ASSERT_EQUALS(translator7->translate("2").discr_val, (std::size_t)4) 766 TS_ASSERT_EQUALS(translator7->translate("3").discr_val, (std::size_t)0) 767 TS_ASSERT_EQUALS(translator7->translate("4").discr_val, (std::size_t)1) 768 TS_ASSERT_EQUALS(translator7->translate("5").discr_val, (std::size_t)2) 769 770 LearningAlloc< gum::learning::DBTranslator4RangeVariable< LearningAlloc > > allocator2( 771 translator7->getAllocator()); 772 allocator2.destroy(translator7); 773 allocator2.deallocate(translator7, 1); 774 775 translator5 = translator6; 776 TS_ASSERT_EQUALS(translator5.translate("-1").discr_val, (std::size_t)5) 777 TS_ASSERT_EQUALS(translator5.translate("0").discr_val, (std::size_t)6) 778 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)3) 779 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)4) 780 TS_ASSERT_EQUALS(translator5.translate("3").discr_val, (std::size_t)0) 781 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)1) 782 TS_ASSERT_EQUALS(translator5.translate("5").discr_val, (std::size_t)2) 783 784 translator3 = translator5; 785 TS_ASSERT_EQUALS(translator3.translate("-1").discr_val, (std::size_t)5) 786 TS_ASSERT_EQUALS(translator3.translate("0").discr_val, (std::size_t)6) 787 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)3) 788 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)4) 789 TS_ASSERT_EQUALS(translator3.translate("3").discr_val, (std::size_t)0) 790 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)1) 791 TS_ASSERT_EQUALS(translator3.translate("5").discr_val, (std::size_t)2) 792 793 translator5 = std::move(translator3); 794 TS_ASSERT_EQUALS(translator5.translate("-1").discr_val, (std::size_t)5) 795 TS_ASSERT_EQUALS(translator5.translate("0").discr_val, (std::size_t)6) 796 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)3) 797 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)4) 798 TS_ASSERT_EQUALS(translator5.translate("3").discr_val, (std::size_t)0) 799 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)1) 800 TS_ASSERT_EQUALS(translator5.translate("5").discr_val, (std::size_t)2) 801 } 802 803 test_trans6()804 void test_trans6() { 805 gum::RangeVariable var("X1", "", 2, 4); 806 std::vector< std::string > missing{"N/A", "3", "toto"}; 807 808 gum::learning::DBTranslator4RangeVariable<> translator(var, missing, true); 809 TS_ASSERT_EQUALS(translator.needsReordering(), false) 810 TS_ASSERT_EQUALS(translator.domainSize(), (gum::Size)3) 811 812 TS_ASSERT_EQUALS((translator << "7").discr_val, (std::size_t)5) 813 TS_ASSERT_EQUALS((translator >> gum::learning::DBTranslatedValue{std::size_t{5}}), "7") 814 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 815 "2"); 816 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 817 "3"); 818 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 819 "4"); 820 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 821 "5"); 822 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{4}}), 823 "6"); 824 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{5}}), 825 "7"); 826 TS_ASSERT((translator.translateBack( 827 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}) 828 == "N/A") 829 || (translator.translateBack( 830 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}) 831 == "toto")); 832 833 gum::Set< std::string > missing_kept{"N/A", "toto"}; 834 TS_ASSERT_EQUALS(translator.missingSymbols(), missing_kept) 835 } 836 }; 837 838 } /* namespace gum_tests */ 839