| 356 | |
| 357 | // IdMap, RangeIdMap |
| 358 | { |
| 359 | typedef ListDigraph Graph; |
| 360 | DIGRAPH_TYPEDEFS(Graph); |
| 361 | |
| 362 | checkConcept<ReadMap<Node, int>, IdMap<Graph, Node> >(); |
| 363 | checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >(); |
| 364 | checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >(); |
| 365 | checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >(); |
| 366 | |
| 367 | Graph gr; |
| 368 | IdMap<Graph, Node> nmap(gr); |
| 369 | IdMap<Graph, Arc> amap(gr); |
| 370 | RangeIdMap<Graph, Node> nrmap(gr); |
| 371 | RangeIdMap<Graph, Arc> armap(gr); |
| 372 | |
| 373 | Node n0 = gr.addNode(); |
| 374 | Node n1 = gr.addNode(); |
| 375 | Node n2 = gr.addNode(); |
| 376 | |
| 377 | Arc a0 = gr.addArc(n0, n1); |
| 378 | Arc a1 = gr.addArc(n0, n2); |
| 379 | Arc a2 = gr.addArc(n2, n1); |
| 380 | Arc a3 = gr.addArc(n2, n0); |
| 381 | |
| 382 | check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap"); |
| 383 | check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap"); |
| 384 | check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap"); |
| 385 | |
| 386 | check(amap[a0] == gr.id(a0) && amap(gr.id(a0)) == a0, "Wrong IdMap"); |
| 387 | check(amap[a1] == gr.id(a1) && amap(gr.id(a1)) == a1, "Wrong IdMap"); |
| 388 | check(amap[a2] == gr.id(a2) && amap(gr.id(a2)) == a2, "Wrong IdMap"); |
| 389 | check(amap[a3] == gr.id(a3) && amap(gr.id(a3)) == a3, "Wrong IdMap"); |
| 390 | |
| 391 | check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap"); |
| 392 | check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap"); |
| 393 | |
| 394 | check(nrmap.size() == 3 && armap.size() == 4, |
| 395 | "Wrong RangeIdMap::size()"); |
| 396 | |
| 397 | check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap"); |
| 398 | check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap"); |
| 399 | check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap"); |
| 400 | |
| 401 | check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap"); |
| 402 | check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap"); |
| 403 | check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap"); |
| 404 | check(armap[a3] == 3 && armap(3) == a3, "Wrong RangeIdMap"); |
| 405 | |
| 406 | check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap"); |
| 407 | check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap"); |
| 408 | |
| 409 | gr.erase(n1); |
| 410 | |
| 411 | if (nrmap[n0] == 1) nrmap.swap(n0, n2); |
| 412 | nrmap.swap(n2, n0); |
| 413 | if (armap[a1] == 1) armap.swap(a1, a3); |
| 414 | armap.swap(a3, a1); |
| 415 | |
| 416 | check(nrmap.size() == 2 && armap.size() == 2, |
| 417 | "Wrong RangeIdMap::size()"); |
| 418 | |
| 419 | check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap"); |
| 420 | check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap"); |
| 421 | |
| 422 | check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap"); |
| 423 | check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap"); |
| 424 | |
| 425 | check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap"); |
| 426 | check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap"); |
| 427 | } |
| 428 | |
| 429 | // CrossRefMap |
| 430 | { |
| 431 | typedef ListDigraph Graph; |
| 432 | DIGRAPH_TYPEDEFS(Graph); |
| 433 | |
| 434 | checkConcept<ReadWriteMap<Node, int>, |
| 435 | CrossRefMap<Graph, Node, int> >(); |
| 436 | checkConcept<ReadWriteMap<Node, bool>, |
| 437 | CrossRefMap<Graph, Node, bool> >(); |
| 438 | checkConcept<ReadWriteMap<Node, double>, |
| 439 | CrossRefMap<Graph, Node, double> >(); |
| 440 | |
| 441 | Graph gr; |
| 442 | CrossRefMap<Graph, Node, char> map(gr); |
| 443 | |
| 444 | Node n0 = gr.addNode(); |
| 445 | Node n1 = gr.addNode(); |
| 446 | Node n2 = gr.addNode(); |
| 447 | |
| 448 | map.set(n0, 'A'); |
| 449 | map.set(n1, 'B'); |
| 450 | map.set(n2, 'C'); |
| 451 | |
| 452 | check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0, |
| 453 | "Wrong CrossRefMap"); |
| 454 | check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1, |
| 455 | "Wrong CrossRefMap"); |
| 456 | check(map[n2] == 'C' && map('C') == n2 && map.inverse()['C'] == n2, |
| 457 | "Wrong CrossRefMap"); |
| 458 | |
| 459 | map.set(n2, 'A'); |
| 460 | |
| 461 | check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A', |
| 462 | "Wrong CrossRefMap"); |
| 463 | check(map('A') == n0 && map.inverse()['A'] == n0, "Wrong CrossRefMap"); |
| 464 | check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap"); |
| 465 | check(map('C') == INVALID && map.inverse()['C'] == INVALID, |
| 466 | "Wrong CrossRefMap"); |
| 467 | |
| 468 | map.set(n0, 'C'); |
| 469 | |
| 470 | check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A', |
| 471 | "Wrong CrossRefMap"); |
| 472 | check(map('A') == INVALID && map.inverse()['A'] == INVALID, |
| 473 | "Wrong CrossRefMap"); |
| 474 | check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap"); |
| 475 | check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap"); |
| 476 | } |