LCOV - code coverage report
Current view: top level - src/unique - unique.js (source / functions) Hit Total Coverage
Test: cov_profile.lcov Lines: 40 40 100.0 %
Date: 2021-12-16 00:47:58 Functions: 3 3 100.0 %
Branches: 18 18 100.0 %

           Branch data     Line data    Source code
       1                 :          2 : const unique = (
       2            [ + ]:         14 :   seeded,
       3                 :         14 :   qtyIn,
       4                 :         14 :   fn,
       5                 :         14 :   { duplicateLimit = (qty) => qty * 2, comparator = (a, b) => a === b } = {},
       6                 :         14 : ) => {
       7                 :         14 :   const qty = typeof qtyIn === "number" ? qtyIn : seeded.number(qtyIn);
       8         [ +  + ]:         14 :   const duplicates = typeof duplicateLimit === "function"
       9                 :         14 :     ? duplicateLimit(qty)
      10            [ + ]:         14 :     : duplicateLimit;
      11            [ + ]:         14 :   const unmatched = Symbol("unmatched");
      12                 :         14 :   let count = 0;
      13                 :         14 :   const result = seeded.array(qty + duplicates, (seeded) => {
      14            [ + ]:        158 :     // return early if we already have enough data
      15                 :        158 :     const index = seeded.info().path[0];
      16                 :        158 :     if (index + 1 > qty + count) {
      17       [ + ][ + ]:        224 :       return null;
      18                 :        158 :     }
      19       [ + ][ + ]:        236 : 
      20                 :        236 :     const item = seeded.object(fn);
      21                 :        236 :     if (
      22                 :        236 :       seeded.data.findIndex((dataItem) => comparator(item, dataItem)) !== -1
      23            [ + ]:        158 :     ) {
      24       [ + ][ + ]:        180 :       count++;
      25                 :        180 :       // console.log(item)
      26                 :        180 :       return unmatched;
      27                 :        158 :     } else {
      28       [ + ][ + ]:        214 :       return item;
      29                 :        158 :     }
      30                 :         14 :   }).filter((item) => item !== unmatched).slice(0, qty);
      31            [ + ]:         14 : 
      32                 :         14 :   // console.log(`Duplicates: ${count}`)
      33                 :         14 :   if (result.length === qty) {
      34            [ + ]:         22 :     return result;
      35                 :         14 :   } else {
      36            [ + ]:         18 :     throw Error(`Too many duplicates`);
      37                 :         14 :   }
      38                 :          2 : };
      39                 :          2 : 
      40                 :          1 : export default unique;

Generated by: LCOV version 1.15