|
27 | 27 | funcs{end+1} = @test_referring_multi_tags;
|
28 | 28 | funcs{end+1} = @test_compare;
|
29 | 29 | funcs{end+1} = @test_filter_source;
|
| 30 | + funcs{end+1} = @test_find_source; |
| 31 | + funcs{end+1} = @test_find_source_filtered; |
30 | 32 | end
|
31 | 33 |
|
32 | 34 | %% Test: fetch sources
|
|
369 | 371 | assert(size(filtered, 1) == 1);
|
370 | 372 | assert(strcmp(filtered{1}.name, mainName));
|
371 | 373 | end
|
| 374 | + |
| 375 | +%% Test: Find source w/o filter |
| 376 | +function [] = test_find_source |
| 377 | + f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite); |
| 378 | + b = f.create_block('testBlock', 'nixBlock'); |
| 379 | + s = b.create_source('mainSource', 'nixSource'); |
| 380 | + sl1 = s.create_source('sourceLvl1', 'nixSource'); |
| 381 | + |
| 382 | + sl21 = sl1.create_source('sourceLvl2_1', 'nixSource'); |
| 383 | + sl22 = sl1.create_source('sourceLvl2_2', 'nixSource'); |
| 384 | + |
| 385 | + sl31 = sl21.create_source('sourceLvl3_1', 'nixSource'); |
| 386 | + sl32 = sl21.create_source('sourceLvl3_2', 'nixSource'); |
| 387 | + sl33 = sl21.create_source('sourceLvl3_3', 'nixSource'); |
| 388 | + |
| 389 | + sl41 = sl31.create_source('sourceLvl4_1', 'nixSource'); |
| 390 | + sl42 = sl31.create_source('sourceLvl4_2', 'nixSource'); |
| 391 | + sl43 = sl31.create_source('sourceLvl4_3', 'nixSource'); |
| 392 | + sl44 = sl31.create_source('sourceLvl4_4', 'nixSource'); |
| 393 | + |
| 394 | + % Check invalid entry |
| 395 | + err = 'Provide a valid search depth'; |
| 396 | + try |
| 397 | + s.find_sources('hurra'); |
| 398 | + catch ME |
| 399 | + assert(strcmp(ME.message, err)); |
| 400 | + end |
| 401 | + |
| 402 | + % find all |
| 403 | + filtered = s.find_sources(4); |
| 404 | + assert(size(filtered, 1) == 11); |
| 405 | + |
| 406 | + % find until level 3 |
| 407 | + filtered = s.find_sources(3); |
| 408 | + assert(size(filtered, 1) == 7); |
| 409 | + |
| 410 | + % find until level 2 |
| 411 | + filtered = s.find_sources(2); |
| 412 | + assert(size(filtered, 1) == 4); |
| 413 | + |
| 414 | + % find until level 1 |
| 415 | + filtered = s.find_sources(1); |
| 416 | + assert(size(filtered, 1) == 2); |
| 417 | + |
| 418 | + % find until level 0 |
| 419 | + filtered = s.find_sources(0); |
| 420 | + assert(size(filtered, 1) == 1); |
| 421 | +end |
| 422 | + |
| 423 | +%% Test: Find sources with filters |
| 424 | +function [] = test_find_source_filtered |
| 425 | + findSource = 'nixFindSource'; |
| 426 | + f = nix.File(fullfile(pwd, 'tests', 'testRW.h5'), nix.FileMode.Overwrite); |
| 427 | + b = f.create_block('testBlock', 'nixBlock'); |
| 428 | + s = b.create_source('mainSource', 'nixSource'); |
| 429 | + sl1 = s.create_source('sourceLvl1', 'nixSource'); |
| 430 | + |
| 431 | + sl21 = sl1.create_source('sourceLvl2_1', 'nixSource'); |
| 432 | + sl22 = sl1.create_source('sourceLvl2_2', findSource); |
| 433 | + |
| 434 | + sl31 = sl21.create_source('sourceLvl3_1', findSource); |
| 435 | + sl32 = sl21.create_source('sourceLvl3_2', 'nixSource'); |
| 436 | + sl33 = sl21.create_source('sourceLvl3_3', 'nixSource'); |
| 437 | + |
| 438 | + sl41 = sl31.create_source('sourceLvl4_1', 'nixSource'); |
| 439 | + sl42 = sl31.create_source('sourceLvl4_2', 'nixSource'); |
| 440 | + sl43 = sl31.create_source('sourceLvl4_3', findSource); |
| 441 | + sl44 = sl31.create_source('sourceLvl4_4', 'nixSource'); |
| 442 | + |
| 443 | + % test find by id |
| 444 | + filtered = s.find_filtered_sources(0, nix.Filter.id, sl41.id); |
| 445 | + assert(isempty(filtered)); |
| 446 | + filtered = s.find_filtered_sources(4, nix.Filter.id, sl41.id); |
| 447 | + assert(size(filtered, 1) == 1); |
| 448 | + assert(strcmp(filtered{1}.id, sl41.id)); |
| 449 | + |
| 450 | + % test find by ids |
| 451 | + filterids = {sl1.id, sl41.id}; |
| 452 | + filtered = s.find_filtered_sources(1, nix.Filter.ids, filterids); |
| 453 | + assert(size(filtered, 1) == 1); |
| 454 | + filtered = s.find_filtered_sources(4, nix.Filter.ids, filterids); |
| 455 | + assert(size(filtered, 1) == 2); |
| 456 | + |
| 457 | + % test find by name |
| 458 | + filtered = s.find_filtered_sources(0, nix.Filter.name, sl41.name); |
| 459 | + assert(isempty(filtered)); |
| 460 | + filtered = s.find_filtered_sources(4, nix.Filter.name, sl41.name); |
| 461 | + assert(size(filtered, 1) == 1); |
| 462 | + assert(strcmp(filtered{1}.name, sl41.name)); |
| 463 | + |
| 464 | + % test find by type |
| 465 | + filtered = s.find_filtered_sources(0, nix.Filter.type, findSource); |
| 466 | + assert(isempty(filtered)); |
| 467 | + filtered = s.find_filtered_sources(4, nix.Filter.type, findSource); |
| 468 | + assert(size(filtered, 1) == 3); |
| 469 | + assert(strcmp(filtered{1}.type, findSource)); |
| 470 | + |
| 471 | + % test nix.Filter.metadata |
| 472 | + sec = f.create_section('testSection', 'nixSection'); |
| 473 | + sl43.set_metadata(sec); |
| 474 | + filtered = s.find_filtered_sources(0, nix.Filter.metadata, sec.id); |
| 475 | + assert(isempty(filtered)); |
| 476 | + filtered = s.find_filtered_sources(4, nix.Filter.metadata, sec.id); |
| 477 | + assert(size(filtered, 1) == 1); |
| 478 | + strcmp(filtered{1}.id, sl43.id); |
| 479 | + |
| 480 | + % test nix.Filter.source |
| 481 | + filtered = s.find_filtered_sources(0, nix.Filter.source, sl44.id); |
| 482 | + assert(isempty(filtered)); |
| 483 | + filtered = s.find_filtered_sources(4, nix.Filter.source, sl44.id); |
| 484 | + assert(size(filtered, 1) == 1); |
| 485 | + assert(strcmp(filtered{1}.id, sl31.id)); |
| 486 | +end |
0 commit comments