@@ -351,3 +351,309 @@ test_that("get_count_datasets works", {
351351 # )
352352 # expect_error(cds <- get_count_datasets(se1), "assays must be named")
353353})
354+
355+ test_that(" check_if_assays_are_NOT_consistently_ordered works correctly" , {
356+ # Use testthat edition 3
357+ local_edition(3 )
358+
359+ # Test 1: SE with no assays - should return FALSE
360+ se_empty <- SummarizedExperiment :: SummarizedExperiment(
361+ assays = list ()
362+ )
363+ expect_false(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_empty ))
364+
365+ # Test 2: SE with assays but no colnames - should return FALSE
366+ se_no_colnames <- SummarizedExperiment :: SummarizedExperiment(
367+ assays = list (
368+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
369+ mat2 = matrix (seq(10 , 18 ), nrow = 3 )
370+ )
371+ )
372+ expect_false(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_no_colnames ))
373+
374+ # Test 3: SE with assays, some with colnames, some without - should return FALSE
375+ se_mixed <- SummarizedExperiment :: SummarizedExperiment(
376+ assays = list (
377+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
378+ mat2 = matrix (seq(10 , 18 ), nrow = 3 )
379+ )
380+ )
381+ colnames(assay(se_mixed , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
382+ expect_false(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_mixed ))
383+
384+ # Test 4: SE with assays, all with same colnames in same order - should return FALSE
385+ se_consistent <- SummarizedExperiment :: SummarizedExperiment(
386+ assays = list (
387+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
388+ mat2 = matrix (seq(10 , 18 ), nrow = 3 )
389+ )
390+ )
391+ colnames(assay(se_consistent , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
392+ colnames(assay(se_consistent , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
393+ expect_false(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_consistent ))
394+
395+ # Test 5: SE with assays, all with same colnames but different order - should return TRUE
396+ se_inconsistent <- SummarizedExperiment :: SummarizedExperiment(
397+ assays = list (
398+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
399+ mat2 = matrix (seq(10 , 18 ), nrow = 3 )
400+ )
401+ )
402+ colnames(assay(se_inconsistent , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
403+ colnames(assay(se_inconsistent , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
404+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_inconsistent ))
405+
406+ # Test 6: SE with assays, all with same colnames but different order (reverse) - should return TRUE
407+ se_reverse <- SummarizedExperiment :: SummarizedExperiment(
408+ assays = list (
409+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
410+ mat2 = matrix (seq(10 , 18 ), nrow = 3 )
411+ )
412+ )
413+ colnames(assay(se_reverse , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
414+ colnames(assay(se_reverse , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 2 , 1 ))
415+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_reverse ))
416+
417+ # Test 7: SE with assays, all with same colnames but different order (middle swap) - should return TRUE
418+ se_middle_swap <- SummarizedExperiment :: SummarizedExperiment(
419+ assays = list (
420+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
421+ mat2 = matrix (seq(10 , 18 ), nrow = 3 )
422+ )
423+ )
424+ colnames(assay(se_middle_swap , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
425+ colnames(assay(se_middle_swap , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(1 , 3 , 2 ))
426+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_middle_swap ))
427+
428+ # Test 8: SE with 3 assays, first two consistent, third different - should return TRUE
429+ se_three_assays <- SummarizedExperiment :: SummarizedExperiment(
430+ assays = list (
431+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
432+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
433+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
434+ )
435+ )
436+ colnames(assay(se_three_assays , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
437+ colnames(assay(se_three_assays , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
438+ colnames(assay(se_three_assays , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
439+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_three_assays ))
440+
441+ # Test 9: SE with 3 assays, all consistent - should return FALSE
442+ se_three_consistent <- SummarizedExperiment :: SummarizedExperiment(
443+ assays = list (
444+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
445+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
446+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
447+ )
448+ )
449+ colnames(assay(se_three_consistent , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
450+ colnames(assay(se_three_consistent , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
451+ colnames(assay(se_three_consistent , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
452+ expect_false(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_three_consistent ))
453+
454+ # Test 10: SE with assays, all with same colnames but different order (complex permutation) - should return TRUE
455+ se_complex <- SummarizedExperiment :: SummarizedExperiment(
456+ assays = list (
457+ mat1 = matrix (seq_len(12 ), nrow = 3 ),
458+ mat2 = matrix (seq(13 , 24 ), nrow = 3 )
459+ )
460+ )
461+ colnames(assay(se_complex , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(4 ))
462+ colnames(assay(se_complex , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(4 , 2 , 1 , 3 ))
463+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_complex ))
464+
465+ # Test 11: SE with assays, all with same colnames but different order (all different) - should return TRUE
466+ se_all_different <- SummarizedExperiment :: SummarizedExperiment(
467+ assays = list (
468+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
469+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
470+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
471+ )
472+ )
473+ colnames(assay(se_all_different , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
474+ colnames(assay(se_all_different , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
475+ colnames(assay(se_all_different , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
476+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different ))
477+
478+ # Test 12: SE with assays, all with same colnames but different order (pairwise different) - should return TRUE
479+ se_pairwise <- SummarizedExperiment :: SummarizedExperiment(
480+ assays = list (
481+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
482+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
483+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
484+ )
485+ )
486+ colnames(assay(se_pairwise , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
487+ colnames(assay(se_pairwise , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
488+ colnames(assay(se_pairwise , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
489+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_pairwise ))
490+
491+ # Test 13: SE with assays, all with same colnames but different order (first and last same) - should return TRUE
492+ se_first_last <- SummarizedExperiment :: SummarizedExperiment(
493+ assays = list (
494+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
495+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
496+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
497+ )
498+ )
499+ colnames(assay(se_first_last , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
500+ colnames(assay(se_first_last , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
501+ colnames(assay(se_first_last , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
502+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_first_last ))
503+
504+ # Test 14: SE with assays, all with same colnames but different order (middle different) - should return TRUE
505+ se_middle_different <- SummarizedExperiment :: SummarizedExperiment(
506+ assays = list (
507+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
508+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
509+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
510+ )
511+ )
512+ colnames(assay(se_middle_different , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
513+ colnames(assay(se_middle_different , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
514+ colnames(assay(se_middle_different , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
515+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_middle_different ))
516+
517+ # Test 15: SE with assays, all with same colnames but different order (first different) - should return TRUE
518+ se_first_different <- SummarizedExperiment :: SummarizedExperiment(
519+ assays = list (
520+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
521+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
522+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
523+ )
524+ )
525+ colnames(assay(se_first_different , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
526+ colnames(assay(se_first_different , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
527+ colnames(assay(se_first_different , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
528+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_first_different ))
529+
530+ # Test 16: SE with assays, all with same colnames but different order (last different) - should return TRUE
531+ se_last_different <- SummarizedExperiment :: SummarizedExperiment(
532+ assays = list (
533+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
534+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
535+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
536+ )
537+ )
538+ colnames(assay(se_last_different , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
539+ colnames(assay(se_last_different , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
540+ colnames(assay(se_last_different , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
541+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_last_different ))
542+
543+ # Test 17: SE with assays, all with same colnames but different order (all different) - should return TRUE
544+ se_all_different_2 <- SummarizedExperiment :: SummarizedExperiment(
545+ assays = list (
546+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
547+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
548+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
549+ )
550+ )
551+ colnames(assay(se_all_different_2 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
552+ colnames(assay(se_all_different_2 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
553+ colnames(assay(se_all_different_2 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
554+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_2 ))
555+
556+ # Test 18: SE with assays, all with same colnames but different order (all different) - should return TRUE
557+ se_all_different_3 <- SummarizedExperiment :: SummarizedExperiment(
558+ assays = list (
559+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
560+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
561+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
562+ )
563+ )
564+ colnames(assay(se_all_different_3 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
565+ colnames(assay(se_all_different_3 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
566+ colnames(assay(se_all_different_3 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
567+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_3 ))
568+
569+ # Test 19: SE with assays, all with same colnames but different order (all different) - should return TRUE
570+ se_all_different_4 <- SummarizedExperiment :: SummarizedExperiment(
571+ assays = list (
572+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
573+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
574+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
575+ )
576+ )
577+ colnames(assay(se_all_different_4 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
578+ colnames(assay(se_all_different_4 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
579+ colnames(assay(se_all_different_4 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
580+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_4 ))
581+
582+ # Test 20: SE with assays, all with same colnames but different order (all different) - should return TRUE
583+ se_all_different_5 <- SummarizedExperiment :: SummarizedExperiment(
584+ assays = list (
585+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
586+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
587+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
588+ )
589+ )
590+ colnames(assay(se_all_different_5 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
591+ colnames(assay(se_all_different_5 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
592+ colnames(assay(se_all_different_5 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
593+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_5 ))
594+
595+ # Test 21: SE with assays, all with same colnames but different order (all different) - should return TRUE
596+ se_all_different_6 <- SummarizedExperiment :: SummarizedExperiment(
597+ assays = list (
598+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
599+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
600+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
601+ )
602+ )
603+ colnames(assay(se_all_different_6 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
604+ colnames(assay(se_all_different_6 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
605+ colnames(assay(se_all_different_6 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
606+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_6 ))
607+
608+ # Test 22: SE with assays, all with same colnames but different order (all different) - should return TRUE
609+ se_all_different_7 <- SummarizedExperiment :: SummarizedExperiment(
610+ assays = list (
611+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
612+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
613+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
614+ )
615+ )
616+ colnames(assay(se_all_different_7 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
617+ colnames(assay(se_all_different_7 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
618+ colnames(assay(se_all_different_7 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
619+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_7 ))
620+
621+ # Test 23: SE with assays, all with same colnames but different order (all different) - should return TRUE
622+ se_all_different_8 <- SummarizedExperiment :: SummarizedExperiment(
623+ assays = list (
624+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
625+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
626+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
627+ )
628+ )
629+ colnames(assay(se_all_different_8 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
630+ colnames(assay(se_all_different_8 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
631+ colnames(assay(se_all_different_8 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
632+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_8 ))
633+
634+ # Test 24: SE with assays, all with same colnames but different order (all different) - should return TRUE
635+ se_all_different_9 <- SummarizedExperiment :: SummarizedExperiment(
636+ assays = list (
637+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
638+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
639+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
640+ )
641+ )
642+ colnames(assay(se_all_different_9 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
643+ colnames(assay(se_all_different_9 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , seq_len(3 ))
644+ colnames(assay(se_all_different_9 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
645+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_9 ))
646+
647+ # Test 25: SE with assays, all with same colnames but different order (all different) - should return TRUE
648+ se_all_different_10 <- SummarizedExperiment :: SummarizedExperiment(
649+ assays = list (
650+ mat1 = matrix (seq_len(9 ), nrow = 3 ),
651+ mat2 = matrix (seq(10 , 18 ), nrow = 3 ),
652+ mat3 = matrix (seq(19 , 27 ), nrow = 3 )
653+ )
654+ )
655+ colnames(assay(se_all_different_10 , " mat1" , withDimnames = FALSE )) <- paste0(" S" , c(3 , 1 , 2 ))
656+ colnames(assay(se_all_different_10 , " mat2" , withDimnames = FALSE )) <- paste0(" S" , c(2 , 3 , 1 ))
657+ colnames(assay(se_all_different_10 , " mat3" , withDimnames = FALSE )) <- paste0(" S" , c(1 , 2 , 3 ))
658+ expect_true(tidySummarizedExperiment ::: check_if_assays_are_NOT_consistently_ordered(se_all_different_10 ))
659+ })
0 commit comments