R Under development (unstable) (2026-01-18 r89306 ucrt) -- "Unsuffered Consequences" Copyright (C) 2026 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # This file is part of the standard setup for testthat. > # It is recommended that you do not modify it. > # > # Where should you do your testing? > # > # Learn more about testing at https://r-pkgs.org/testing-basics.html > > library(testthat) > library(joinspy) > > test_check("joinspy") v Report logged to 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e64c36c40.txt' v Report logged to 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e6466cf5a37.log' v Report logged to 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e6466cf5a37.log' v Report logged to 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e6427c8143d.json' v Report logged to 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e6477b528d3.rds' v Report logged to 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e64389675b8.txt' i Automatic logging enabled: 'test.log' i Automatic logging disabled i Automatic logging enabled: 'test.json' i Automatic logging disabled -- Join Diagnostic Report ------------------------------------------------------ Join columns: id_x = id_y -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 -- Join Diagnostic Report ------------------------------------------------------ i Sampled analysis: 1000 rows from 10000 (x) and 5000 (y) Join columns: id -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 -- Join Diagnostic Report ------------------------------------------------------ Join columns: id -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Issues Detected -- x Error message ! Warning message i Info message -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 -- Join Diagnostic Report ------------------------------------------------------ Join columns: a, b -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Per-Column Breakdown -- a: "66.7%" match rate (2/3) b: "66.7%" match rate (2/3) i Lowest match rate: a -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 -- Join Diagnostic Report ------------------------------------------------------ Join columns: id -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 i Performing "right" join... v Result: 3 rows (as expected) -- Join Diagnostic Report ------------------------------------------------------ Join columns: id -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 i Performing "inner" join... v Result: 2 rows (as expected) -- Join Diagnostic Report ------------------------------------------------------ Join columns: id -- Table Summary -- Left table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 1 Keys only in right: 1 Match rate (left): "66.7%" -- Expected Row Counts -- inner_join: 2 left_join: 3 right_join: 3 full_join: 4 i Performing "full" join... v Result: 4 rows (as expected) v Repaired 3 value(s) v Repaired 1 value(s) v Repaired 2 value(s) v Repaired 1 value(s) -- Repair Preview (Dry Run) ---------------------------------------------------- -- Left table (x) -- i id: trimmed whitespace (2) v Repaired 2 value(s) -- Suggested Repairs ----------------------------------------------------------- x$id <- trimws(x$id) -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 4 rows Right table (y): 4 rows Result: 3 rows i Result has 1 fewer rows than left table -- Why the row count changed -- Join was 1:1 with complete key overlap - no unexpected changes -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 4 rows Right table (y): 2 rows Result: 3 rows i Result has 1 fewer rows than left table -- Why the row count changed -- i Inner join dropped 2 unmatched left rows -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 4 rows Right table (y): 5 rows Result: 3 rows i Result has 1 fewer rows than left table -- Why the row count changed -- i 1 right key(s) have no match in left table -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 3 columns After: 3 rows x 2 columns Change: "+0" rows, "-1" columns -- Column Changes -- x Removed: extra -- Key Analysis -- Unique keys before: 3 Unique keys after: 3 i Detected cardinality: "1:1" i Detected cardinality: "m:1" Left duplicates: 1 key(s) i Detected cardinality: "1:m" Right duplicates: 1 key(s) i Detected cardinality: "m:m" Left duplicates: 1 key(s) Right duplicates: 1 key(s) x Cartesian product risk: result will be 2.6x larger than input -- Worst offending keys -- "1": 3 x 3 = 9 rows "2": 2 x 2 = 4 rows v No Cartesian product risk (expansion factor: 1x) v No matched keys - no Cartesian product risk -- Join Chain Analysis --------------------------------------------------------- -- Step 1: orders + customers -- Left: 3 rows Right: 3 rows Match rate: 100% Expected result: 3 rows (left join) ! 1 issue(s) detected -- Step 2: result + regions -- Left: 9 rows Right: 2 rows Match rate: 100% Expected result: 9 rows (left join) ! 1 issue(s) detected -- Chain Summary -- ! Total issues across chain: 2 ! Key check found 2 issue(s): x Left table has 1 duplicate key(s) (2 rows affected) x Left table has 1 NA key(s) v Key check passed: no issues detected i Automatic logging enabled: 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e642f361c82.log' i Automatic logging disabled i Automatic logging enabled: 'D:\temp\2026_01_19_22_20_17_1682\Rtmpi47iYQ\file10e641f55a58.json' i Automatic logging disabled -- Join Diagnostic Report ------------------------------------------------------ Join columns: id -- Table Summary -- Left table: Rows: 3 Unique keys: 2 Duplicate keys: 1 NA keys: 0 Right table: Rows: 3 Unique keys: 3 Duplicate keys: 0 NA keys: 0 -- Match Analysis -- Keys in both: 2 Keys only in left: 0 Keys only in right: 1 Match rate (left): "100%" -- Issues Detected -- ! Left table has 1 duplicate key(s) affecting 2 rows - may cause row multiplication -- Expected Row Counts -- inner_join: 3 left_join: 3 right_join: 4 full_join: 4 i Performing "left" join... v Result: 3 rows (as expected) ! Key check found 1 issue(s): x Left table column 'id' has whitespace issues (2 values) ! Key check found 1 issue(s): x Column 'id'/'id' has 2 case mismatch(es) v Repaired 1 value(s) -- Repair Preview (Dry Run) ---------------------------------------------------- v No repairs needed -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 3 rows Right table (y): 3 rows Result: 3 rows v Result has same row count as left table -- Why the row count changed -- i Right table has 1 duplicate key(s) - each match creates multiple rows i 1 left key(s) have no match in right table -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 4 rows Right table (y): 4 rows Result: 2 rows i Result has 2 fewer rows than left table -- Why the row count changed -- i Both tables have duplicate keys - this causes multiplicative row expansion -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 2 rows x 2 columns After: 3 rows x 2 columns Change: "+1" rows, "+0" columns -- Column Changes -- No column changes -- Key Analysis -- Unique keys before: 2 Unique keys after: 3 -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 4 rows x 2 columns Change: "+1" rows, "+0" columns -- Column Changes -- No column changes -- Key Analysis -- Unique keys before: 3 Unique keys after: 3 Duplicate rows: "+2" v No Cartesian product risk (expansion factor: 1.7x) v No repairs suggested - data looks clean! -- Suggested Repairs ----------------------------------------------------------- # Standardize case: x$id <- tolower(x$id) y$id <- tolower(y$id) v Key check passed: no issues detected v Repaired 2 value(s) i Detected cardinality: "1:1" ! Key check found 1 issue(s): x Right table column 'id' has whitespace issues (2 values) ! Key check found 1 issue(s): x Right table has 1 duplicate key(s) (2 rows affected) ! Key check found 1 issue(s): x Right table has 1 NA key(s) -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 3 rows Right table (y): 3 rows Result: 3 rows v Result has same row count as left table -- Why the row count changed -- Join was 1:1 with complete key overlap - no unexpected changes -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 4 rows Right table (y): 4 rows Result: 3 rows i Result has 1 fewer rows than left table -- Why the row count changed -- i Both tables have duplicate keys - this causes multiplicative row expansion -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 3 rows x 2 columns Change: "+0" rows, "+0" columns -- Column Changes -- No column changes -- Key Analysis -- Unique keys before: 3 Unique keys after: 3 -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 3 rows x 3 columns Change: "+0" rows, "+1" columns -- Column Changes -- v Added: new_col -- Key Analysis -- Unique keys before: 3 Unique keys after: 3 -- Repair Preview (Dry Run) ---------------------------------------------------- -- Left table (x) -- i id: trimmed whitespace (1) -- Right table (y) -- i id: trimmed whitespace (1) -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 3 rows Right table (y): 3 rows Result: 3 rows v Result has same row count as left table -- Why the row count changed -- i 1 left key(s) have no match in right table -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 3 rows Right table (y): 3 rows Result: 3 rows v Result has same row count as left table -- Why the row count changed -- i 1 left key(s) have no match in right table -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 3 rows Right table (y): 4 rows Result: 4 rows ! Result has 1 more rows than left table -- Why the row count changed -- i Right table has 1 duplicate key(s) - each match creates multiple rows -- Join Explanation ------------------------------------------------------------ -- Row Counts -- Left table (x): 3 rows Right table (y): 3 rows Result: 3 rows v Result has same row count as left table -- Why the row count changed -- i 1 left key(s) have no match in right table -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 4 rows x 3 columns Change: "+1" rows, "+1" columns -- Column Changes -- v Added: name -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 4 rows x 3 columns Change: "+1" rows, "+1" columns -- Column Changes -- v Added: name -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 3 rows x 3 columns Change: "+0" rows, "+1" columns -- Column Changes -- v Added: name -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 3 columns After: 3 rows x 2 columns Change: "+0" rows, "-1" columns -- Column Changes -- x Removed: extra -- Join Diff ------------------------------------------------------------------- -- Dimensions -- Before: 3 rows x 2 columns After: 4 rows x 2 columns Change: "+1" rows, "+0" columns -- Column Changes -- No column changes -- Key Analysis -- Unique keys before: 3 Unique keys after: 3 Duplicate rows: "+2" v Repaired 3 value(s) v Repaired 2 value(s) v Repaired 1 value(s) -- Repair Preview (Dry Run) ---------------------------------------------------- -- Left table (x) -- i id: trimmed whitespace (2) v Repaired 2 value(s) x Cartesian product risk: result will be 2.6x larger than input -- Worst offending keys -- "1": 3 x 3 = 9 rows "2": 2 x 2 = 4 rows v No Cartesian product risk (expansion factor: 1x) i Detected cardinality: "1:1" i Detected cardinality: "1:m" Right duplicates: 1 key(s) i Detected cardinality: "m:1" Left duplicates: 1 key(s) i Detected cardinality: "m:m" Left duplicates: 1 key(s) Right duplicates: 1 key(s) -- Join Chain Analysis --------------------------------------------------------- -- Step 1: orders + customers -- Left: 3 rows Right: 3 rows Match rate: 100% Expected result: 3 rows (left join) ! 1 issue(s) detected -- Step 2: result + regions -- Left: 9 rows Right: 2 rows Match rate: 100% Expected result: 9 rows (left join) ! 1 issue(s) detected -- Chain Summary -- ! Total issues across chain: 2 [ FAIL 0 | WARN 0 | SKIP 0 | PASS 334 ] > > proc.time() user system elapsed 5.06 0.85 5.95