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/DBTranslator4LabelizedVariable.h> 30 31 namespace gum_tests { 32 33 class DBTranslator4LabelizedVariableTestSuite: public CxxTest::TestSuite { 34 public: test_trans1()35 void test_trans1() { 36 gum::learning::DBTranslator4LabelizedVariable<> translator; 37 TS_ASSERT(translator.isLossless()) 38 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("toto")); 39 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 40 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 41 42 TS_ASSERT_EQUALS(translator.missingValue().discr_val, 43 std::numeric_limits< std::size_t >::max()); 44 45 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("titi")); 46 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 47 TS_ASSERT_EQUALS(translator.translate("titi").discr_val, (std::size_t)1) 48 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 49 "toto"); 50 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 51 "titi"); 52 53 std::vector< std::string > missing{"?", "N/A", "???"}; 54 gum::learning::DBTranslator4LabelizedVariable<> translator2(missing); 55 TS_GUM_ASSERT_THROWS_NOTHING(translator2.translate("toto")); 56 TS_GUM_ASSERT_THROWS_NOTHING(translator2.translate("titi")); 57 TS_ASSERT_EQUALS(translator2.translate("toto").discr_val, (std::size_t)0) 58 TS_ASSERT_EQUALS(translator2.translate("titi").discr_val, (std::size_t)1) 59 TS_ASSERT_EQUALS(translator2.translate("N/A").discr_val, 60 std::numeric_limits< std::size_t >::max()); 61 TS_ASSERT_EQUALS(translator2.translate("?").discr_val, 62 std::numeric_limits< std::size_t >::max()); 63 TS_ASSERT_EQUALS(translator2.translate("???").discr_val, 64 std::numeric_limits< std::size_t >::max()); 65 TS_ASSERT_EQUALS(translator2.translate("??").discr_val, (std::size_t)2) 66 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 67 "toto"); 68 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 69 "titi"); 70 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 71 "??"); 72 73 gum::learning::DBTranslator4LabelizedVariable<> translator3(missing, 3); 74 TS_GUM_ASSERT_THROWS_NOTHING(translator3.translate("toto")); 75 TS_GUM_ASSERT_THROWS_NOTHING(translator3.translate("titi")); 76 TS_ASSERT_EQUALS(translator3.translate("toto").discr_val, (std::size_t)0) 77 TS_ASSERT_EQUALS(translator3.translate("titi").discr_val, (std::size_t)1) 78 TS_ASSERT_EQUALS(translator3.translate("N/A").discr_val, 79 std::numeric_limits< std::size_t >::max()); 80 TS_ASSERT_EQUALS(translator3.translate("?").discr_val, 81 std::numeric_limits< std::size_t >::max()); 82 TS_ASSERT_EQUALS(translator3.translate("???").discr_val, 83 std::numeric_limits< std::size_t >::max()); 84 TS_ASSERT_EQUALS(translator3.translate("??").discr_val, (std::size_t)2) 85 TS_ASSERT_THROWS(translator3.translate("a"), gum::SizeError) 86 87 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 88 "toto"); 89 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 90 "titi"); 91 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 92 "??"); 93 TS_ASSERT_THROWS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 94 gum::UnknownLabelInDatabase); 95 const std::string back = translator3.translateBack( 96 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}); 97 TS_ASSERT(translator3.missingSymbols().exists(back)) 98 } 99 100 test_trans2()101 void test_trans2() { 102 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator; 103 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("toto")); 104 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 105 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 106 107 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("titi")); 108 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 109 TS_ASSERT_EQUALS(translator.translate("titi").discr_val, (std::size_t)1) 110 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 111 "toto"); 112 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 113 "titi"); 114 115 std::vector< std::string > missing{"?", "N/A", "???"}; 116 gum::learning::DBTranslator4LabelizedVariable<> translator2(missing); 117 TS_GUM_ASSERT_THROWS_NOTHING(translator2.translate("toto")); 118 TS_GUM_ASSERT_THROWS_NOTHING(translator2.translate("titi")); 119 TS_ASSERT_EQUALS(translator2.translate("toto").discr_val, (std::size_t)0) 120 TS_ASSERT_EQUALS(translator2.translate("titi").discr_val, (std::size_t)1) 121 TS_ASSERT_EQUALS(translator2.translate("N/A").discr_val, 122 std::numeric_limits< std::size_t >::max()); 123 TS_ASSERT_EQUALS(translator2.translate("?").discr_val, 124 std::numeric_limits< std::size_t >::max()); 125 TS_ASSERT_EQUALS(translator2.translate("???").discr_val, 126 std::numeric_limits< std::size_t >::max()); 127 TS_ASSERT_EQUALS(translator2.translate("??").discr_val, (std::size_t)2) 128 129 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 130 "toto"); 131 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 132 "titi"); 133 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 134 "??"); 135 136 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator3(missing, 3); 137 TS_GUM_ASSERT_THROWS_NOTHING(translator3.translate("toto")); 138 TS_GUM_ASSERT_THROWS_NOTHING(translator3.translate("titi")); 139 TS_ASSERT_EQUALS(translator3.translate("toto").discr_val, (std::size_t)0) 140 TS_ASSERT_EQUALS(translator3.translate("titi").discr_val, (std::size_t)1) 141 TS_ASSERT_EQUALS(translator3.translate("N/A").discr_val, 142 std::numeric_limits< std::size_t >::max()); 143 TS_ASSERT_EQUALS(translator3.translate("?").discr_val, 144 std::numeric_limits< std::size_t >::max()); 145 TS_ASSERT_EQUALS(translator3.translate("???").discr_val, 146 std::numeric_limits< std::size_t >::max()); 147 TS_ASSERT_EQUALS(translator3.translate("??").discr_val, (std::size_t)2) 148 TS_ASSERT_THROWS(translator3.translate("a"), gum::SizeError) 149 150 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 151 "toto"); 152 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 153 "titi"); 154 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 155 "??"); 156 TS_ASSERT_THROWS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 157 gum::UnknownLabelInDatabase); 158 TS_ASSERT(translator3.translateBack( 159 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}) 160 == "?"); 161 } 162 163 test_trans3()164 void test_trans3() { 165 gum::LabelizedVariable var("X1", "", 0); 166 var.addLabel("toto"); 167 var.addLabel("titi"); 168 var.addLabel("tutu"); 169 170 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator(var); 171 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("toto")); 172 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 173 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 174 175 TS_GUM_ASSERT_THROWS_NOTHING(translator.translate("tutu")); 176 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 177 TS_ASSERT_EQUALS(translator.translate("tutu").discr_val, (std::size_t)2) 178 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 179 "toto"); 180 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 181 "titi"); 182 183 std::vector< std::string > missing{"?", "N/A", "???"}; 184 gum::learning::DBTranslator4LabelizedVariable<> translator2(var, missing); 185 TS_GUM_ASSERT_THROWS_NOTHING(translator2.translate("toto")); 186 TS_GUM_ASSERT_THROWS_NOTHING(translator2.translate("titi")); 187 TS_ASSERT_EQUALS(translator2.translate("toto").discr_val, (std::size_t)0) 188 TS_ASSERT_EQUALS(translator2.translate("titi").discr_val, (std::size_t)1) 189 TS_ASSERT_EQUALS(translator2.translate("N/A").discr_val, 190 std::numeric_limits< std::size_t >::max()); 191 TS_ASSERT_EQUALS(translator2.translate("?").discr_val, 192 std::numeric_limits< std::size_t >::max()); 193 TS_ASSERT_EQUALS(translator2.translate("???").discr_val, 194 std::numeric_limits< std::size_t >::max()); 195 TS_ASSERT_THROWS(translator2.translate("??"), gum::UnknownLabelInDatabase) 196 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 197 "toto"); 198 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 199 "titi"); 200 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 201 "tutu"); 202 203 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator3(var, 204 missing, 205 true, 206 3); 207 TS_GUM_ASSERT_THROWS_NOTHING(translator3.translate("toto")); 208 TS_GUM_ASSERT_THROWS_NOTHING(translator3.translate("titi")); 209 TS_ASSERT_EQUALS(translator3.translate("toto").discr_val, (std::size_t)0) 210 TS_ASSERT_EQUALS(translator3.translate("titi").discr_val, (std::size_t)1) 211 TS_ASSERT_EQUALS(translator3.translate("N/A").discr_val, 212 std::numeric_limits< std::size_t >::max()); 213 TS_ASSERT_EQUALS(translator3.translate("?").discr_val, 214 std::numeric_limits< std::size_t >::max()); 215 TS_ASSERT_EQUALS(translator3.translate("???").discr_val, 216 std::numeric_limits< std::size_t >::max()); 217 TS_ASSERT_THROWS(translator3.translate("??"), gum::SizeError) 218 TS_ASSERT_THROWS(translator3.translate("a"), gum::SizeError) 219 220 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 221 "toto"); 222 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 223 "titi"); 224 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 225 "tutu"); 226 TS_ASSERT_THROWS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{3}}), 227 gum::UnknownLabelInDatabase); 228 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{ 229 std::numeric_limits< std::size_t >::max()}), 230 "?"); 231 232 TS_ASSERT_EQUALS(translator3.domainSize(), (gum::Size)3) 233 234 TS_ASSERT_THROWS( 235 gum::learning::DBTranslator4LabelizedVariable<> translator4(var, missing, true, 2), 236 gum::SizeError); 237 } 238 239 test_trans4()240 void test_trans4() { 241 { 242 gum::LabelizedVariable var("X1", "", 0); 243 var.addLabel("1"); 244 var.addLabel("4"); 245 var.addLabel("2"); 246 247 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator(var); 248 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)0) 249 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 250 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)2) 251 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 252 "1"); 253 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 254 "4"); 255 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 256 "2"); 257 TS_ASSERT_EQUALS(translator.variable()->toString(), "X1:Labelized(<1,4,2>)") 258 259 gum::LabelizedVariable var2("X2", "", 0); 260 var2.addLabel("1"); 261 var2.addLabel("2"); 262 var2.addLabel("4"); 263 264 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator2(var2); 265 TS_ASSERT_EQUALS(translator2.translate("1").discr_val, (std::size_t)0) 266 TS_ASSERT_EQUALS(translator2.translate("2").discr_val, (std::size_t)1) 267 TS_ASSERT_EQUALS(translator2.translate("4").discr_val, (std::size_t)2) 268 TS_ASSERT(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 269 == "1"); 270 TS_ASSERT(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 271 == "2"); 272 TS_ASSERT(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 273 == "4"); 274 TS_ASSERT_EQUALS(translator2.variable()->toString(), "X2:Labelized(<1,2,4>)") 275 276 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator3(translator); 277 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)0) 278 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)1) 279 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)2) 280 TS_ASSERT(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 281 == "1"); 282 TS_ASSERT(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 283 == "4"); 284 TS_ASSERT(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 285 == "2"); 286 TS_ASSERT_EQUALS(translator3.variable()->toString(), "X1:Labelized(<1,4,2>)") 287 288 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator4(translator2); 289 TS_ASSERT_EQUALS(translator4.translate("1").discr_val, (std::size_t)0) 290 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)1) 291 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 292 TS_ASSERT(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 293 == "1"); 294 TS_ASSERT(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 295 == "2"); 296 TS_ASSERT(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 297 == "4"); 298 TS_ASSERT_EQUALS(translator4.variable()->toString(), "X2:Labelized(<1,2,4>)") 299 300 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator5( 301 std::move(translator3)); 302 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)0) 303 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)1) 304 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)2) 305 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 306 == "1"); 307 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 308 == "4"); 309 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 310 == "2"); 311 TS_ASSERT_EQUALS(translator5.variable()->toString(), "X1:Labelized(<1,4,2>)") 312 313 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > translator6( 314 std::move(translator4)); 315 TS_ASSERT_EQUALS(translator6.translate("1").discr_val, (std::size_t)0) 316 TS_ASSERT_EQUALS(translator6.translate("2").discr_val, (std::size_t)1) 317 TS_ASSERT_EQUALS(translator6.translate("4").discr_val, (std::size_t)2) 318 TS_ASSERT(translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 319 == "1"); 320 TS_ASSERT(translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 321 == "2"); 322 TS_ASSERT(translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 323 == "4"); 324 TS_ASSERT_EQUALS(translator6.variable()->toString(), "X2:Labelized(<1,2,4>)") 325 326 gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc >* translator7 327 = translator6.clone(); 328 TS_ASSERT_EQUALS(translator7->translate("1").discr_val, (std::size_t)0) 329 TS_ASSERT_EQUALS(translator7->translate("2").discr_val, (std::size_t)1) 330 TS_ASSERT_EQUALS(translator7->translate("4").discr_val, (std::size_t)2) 331 TS_ASSERT(translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 332 == "1"); 333 TS_ASSERT(translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 334 == "2"); 335 TS_ASSERT(translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 336 == "4"); 337 TS_ASSERT_EQUALS(translator7->variable()->toString(), "X2:Labelized(<1,2,4>)") 338 339 DebugCountedAlloc< gum::learning::DBTranslator4LabelizedVariable< DebugCountedAlloc > > 340 allocator(translator7->getAllocator()); 341 allocator.destroy(translator7); 342 allocator.deallocate(translator7, 1); 343 344 translator5 = translator6; 345 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)0) 346 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)1) 347 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)2) 348 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 349 == "1"); 350 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 351 == "2"); 352 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 353 == "4"); 354 TS_ASSERT_EQUALS(translator5.variable()->toString(), "X2:Labelized(<1,2,4>)") 355 356 translator3 = translator5; 357 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)0) 358 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)1) 359 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)2) 360 TS_ASSERT(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 361 == "1"); 362 TS_ASSERT(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 363 == "2"); 364 TS_ASSERT(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 365 == "4"); 366 TS_ASSERT_EQUALS(translator3.variable()->toString(), "X2:Labelized(<1,2,4>)") 367 368 translator5 = std::move(translator3); 369 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)0) 370 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)1) 371 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)2) 372 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 373 == "1"); 374 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 375 == "2"); 376 TS_ASSERT(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 377 == "4"); 378 TS_ASSERT_EQUALS(translator5.variable()->toString(), "X2:Labelized(<1,2,4>)") 379 } 380 381 TS_ASSERT_EQUALS(CountedAlloc::hasMemoryLeak(), false) 382 } 383 384 xtest_trans5()385 void xtest_trans5() { 386 gum::LabelizedVariable var("X1", "", 0); 387 var.addLabel("1"); 388 var.addLabel("4"); 389 var.addLabel("2"); 390 391 LearningAlloc< double > alloc(10000); 392 393 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > translator(var, 394 false, 395 1000, 396 alloc); 397 398 std::cout << alloc.toString() << std::endl; 399 std::cout << translator.getAllocator().toString() << std::endl; 400 401 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)0) 402 TS_ASSERT_EQUALS(translator.translate("4").discr_val, (std::size_t)1) 403 TS_ASSERT_EQUALS(translator.translate("2").discr_val, (std::size_t)2) 404 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 405 "1"); 406 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 407 "4"); 408 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 409 "2"); 410 TS_ASSERT_EQUALS(translator.variable()->toString(), "X1:Labelized(<1,4,2>)") 411 412 const auto& allocator = translator.getAllocator(); 413 std::cout << (allocator == alloc) << std::endl; 414 std::cout << alloc.toString() << std::endl; 415 416 gum::LabelizedVariable var2("X2", "", 0); 417 var2.addLabel("1"); 418 var2.addLabel("2"); 419 var2.addLabel("4"); 420 421 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > translator2(var2); 422 TS_ASSERT_EQUALS(translator2.translate("1").discr_val, (std::size_t)0) 423 TS_ASSERT_EQUALS(translator2.translate("2").discr_val, (std::size_t)1) 424 TS_ASSERT_EQUALS(translator2.translate("4").discr_val, (std::size_t)2) 425 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 426 "1"); 427 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 428 "2"); 429 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 430 "4"); 431 TS_ASSERT_EQUALS(translator2.variable()->toString(), "X2:Labelized(<1,2,4>)") 432 433 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > translator3(translator); 434 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)0) 435 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)1) 436 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)2) 437 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 438 "1"); 439 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 440 "4"); 441 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 442 "2"); 443 TS_ASSERT_EQUALS(translator3.variable()->toString(), "X1:Labelized(<1,4,2>)") 444 445 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > translator4(translator2); 446 TS_ASSERT_EQUALS(translator4.translate("1").discr_val, (std::size_t)0) 447 TS_ASSERT_EQUALS(translator4.translate("2").discr_val, (std::size_t)1) 448 TS_ASSERT_EQUALS(translator4.translate("4").discr_val, (std::size_t)2) 449 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 450 "1"); 451 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 452 "2"); 453 TS_ASSERT_EQUALS(translator4.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 454 "4"); 455 TS_ASSERT_EQUALS(translator4.variable()->toString(), "X2:Labelized(<1,2,4>)") 456 457 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > translator5( 458 std::move(translator3)); 459 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)0) 460 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)1) 461 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)2) 462 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 463 "1"); 464 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 465 "4"); 466 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 467 "2"); 468 TS_ASSERT_EQUALS(translator5.variable()->toString(), "X1:Labelized(<1,4,2>)") 469 470 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > translator6( 471 std::move(translator4)); 472 TS_ASSERT_EQUALS(translator6.translate("1").discr_val, (std::size_t)0) 473 TS_ASSERT_EQUALS(translator6.translate("2").discr_val, (std::size_t)1) 474 TS_ASSERT_EQUALS(translator6.translate("4").discr_val, (std::size_t)2) 475 TS_ASSERT_EQUALS(translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 476 "1"); 477 TS_ASSERT_EQUALS(translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 478 "2"); 479 TS_ASSERT_EQUALS(translator6.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 480 "4"); 481 TS_ASSERT_EQUALS(translator6.variable()->toString(), "X2:Labelized(<1,2,4>)") 482 483 gum::learning::DBTranslator4LabelizedVariable< LearningAlloc >* translator7 484 = translator6.clone(); 485 TS_ASSERT_EQUALS(translator7->translate("1").discr_val, (std::size_t)0) 486 TS_ASSERT_EQUALS(translator7->translate("2").discr_val, (std::size_t)1) 487 TS_ASSERT_EQUALS(translator7->translate("4").discr_val, (std::size_t)2) 488 TS_ASSERT(translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 489 == "1"); 490 TS_ASSERT(translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 491 == "2"); 492 TS_ASSERT(translator7->translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 493 == "4"); 494 TS_ASSERT_EQUALS(translator7->variable()->toString(), "X2:Labelized(<1,2,4>)") 495 496 LearningAlloc< gum::learning::DBTranslator4LabelizedVariable< LearningAlloc > > allocator2( 497 translator7->getAllocator()); 498 allocator2.destroy(translator7); 499 allocator2.deallocate(translator7, 1); 500 501 translator5 = translator6; 502 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)0) 503 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)1) 504 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)2) 505 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 506 "1"); 507 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 508 "2"); 509 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 510 "4"); 511 TS_ASSERT_EQUALS(translator5.variable()->toString(), "X2:Labelized(<1,2,4>)") 512 513 translator3 = translator5; 514 TS_ASSERT_EQUALS(translator3.translate("1").discr_val, (std::size_t)0) 515 TS_ASSERT_EQUALS(translator3.translate("2").discr_val, (std::size_t)1) 516 TS_ASSERT_EQUALS(translator3.translate("4").discr_val, (std::size_t)2) 517 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 518 "1"); 519 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 520 "2"); 521 TS_ASSERT_EQUALS(translator3.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 522 "4"); 523 TS_ASSERT_EQUALS(translator3.variable()->toString(), "X2:Labelized(<1,2,4>)") 524 525 translator5 = std::move(translator3); 526 TS_ASSERT_EQUALS(translator5.translate("1").discr_val, (std::size_t)0) 527 TS_ASSERT_EQUALS(translator5.translate("2").discr_val, (std::size_t)1) 528 TS_ASSERT_EQUALS(translator5.translate("4").discr_val, (std::size_t)2) 529 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 530 "1"); 531 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 532 "2"); 533 TS_ASSERT_EQUALS(translator5.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 534 "4"); 535 TS_ASSERT_EQUALS(translator5.variable()->toString(), "X2:Labelized(<1,2,4>)") 536 } 537 538 test_trans6()539 void test_trans6() { 540 gum::LabelizedVariable var("X1", "", 0); 541 var.addLabel("toto"); 542 var.addLabel("titi"); 543 var.addLabel("???"); 544 545 std::vector< std::string > missing{"?", "N/A", "???"}; 546 547 gum::learning::DBTranslator4LabelizedVariable<> translator(var, missing); 548 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 549 TS_ASSERT_EQUALS(translator.translate("toto").discr_val, (std::size_t)0) 550 TS_ASSERT_EQUALS(translator.translate("N/A").discr_val, 551 std::numeric_limits< std::size_t >::max()); 552 TS_ASSERT_EQUALS(translator.translate("?").discr_val, 553 std::numeric_limits< std::size_t >::max()); 554 TS_ASSERT_EQUALS(translator.translate("???").discr_val, (std::size_t)2) 555 556 TS_ASSERT(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}) 557 == "toto"); 558 TS_ASSERT(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}) 559 == "titi"); 560 TS_ASSERT(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}) 561 == "???"); 562 } 563 test_trans7()564 void test_trans7() { 565 gum::LabelizedVariable var("X1", "", 0); 566 var.addLabel("7"); 567 var.addLabel("1"); 568 var.addLabel("3"); 569 570 std::vector< std::string > missing{"7", "N/A", "toto"}; 571 572 gum::learning::DBTranslator4LabelizedVariable<> translator(var, missing); 573 TS_ASSERT(translator.needsReordering()) 574 TS_ASSERT_EQUALS(translator.domainSize(), (gum::Size)3) 575 576 TS_ASSERT_EQUALS((translator << "7").discr_val, (std::size_t)0) 577 TS_ASSERT_EQUALS((translator >> gum::learning::DBTranslatedValue{std::size_t{0}}), "7") 578 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 579 "7"); 580 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 581 "1"); 582 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 583 "3"); 584 585 std::string back = translator.translateBack( 586 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}); 587 588 gum::Set< std::string > missing_kept{"N/A", "toto"}; 589 TS_ASSERT(missing_kept.exists(back)) 590 TS_ASSERT_EQUALS(translator.missingSymbols(), missing_kept) 591 592 auto new_order = translator.reorder(); 593 594 TS_ASSERT_EQUALS(new_order[0], (std::size_t)2) 595 TS_ASSERT_EQUALS(new_order[1], (std::size_t)0) 596 TS_ASSERT_EQUALS(new_order[2], (std::size_t)1) 597 598 TS_ASSERT_EQUALS(translator.translate("7").discr_val, (std::size_t)2) 599 TS_ASSERT_EQUALS(translator.translate("1").discr_val, (std::size_t)0) 600 TS_ASSERT_EQUALS(translator.translate("3").discr_val, (std::size_t)1) 601 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 602 "1"); 603 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 604 "3"); 605 TS_ASSERT_EQUALS(translator.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 606 "7"); 607 608 609 gum::LabelizedVariable var2("X2", "", 0); 610 var2.addLabel("1"); 611 var2.addLabel("3"); 612 var2.addLabel("7"); 613 614 std::vector< std::string > missing2{"7", "N/A", "toto"}; 615 616 617 gum::learning::DBTranslator4LabelizedVariable<> translator2(var2, missing2); 618 TS_ASSERT_EQUALS(translator2.needsReordering(), false) 619 TS_ASSERT_EQUALS(translator2.domainSize(), (gum::Size)3) 620 621 TS_ASSERT_EQUALS((translator2 << "7").discr_val, (std::size_t)2) 622 TS_ASSERT_EQUALS((translator2 >> gum::learning::DBTranslatedValue{std::size_t{2}}), "7") 623 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{0}}), 624 "1"); 625 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{1}}), 626 "3"); 627 TS_ASSERT_EQUALS(translator2.translateBack(gum::learning::DBTranslatedValue{std::size_t{2}}), 628 "7"); 629 back = translator2.translateBack( 630 gum::learning::DBTranslatedValue{std::numeric_limits< std::size_t >::max()}); 631 TS_ASSERT(translator2.missingSymbols().exists(back)) 632 633 gum::Set< std::string > missing_kept2{"N/A", "toto"}; 634 TS_ASSERT_EQUALS(translator2.missingSymbols(), missing_kept2) 635 636 auto new_order2 = translator2.reorder(); 637 TS_ASSERT_EQUALS(new_order2.size(), (gum::Size)0) 638 } 639 }; 640 641 } /* namespace gum_tests */ 642