[ { "name": "Winkler's MARTHA/MARHTA: 0.9611; a company form and case do not stop an exact match", "args": [ "Martha", [ "marhta", "Dwayne", "MARTHA LTD", "Jones" ], 9000 ], "expect": [ { "index": 2, "candidate": "MARTHA LTD", "matchKey": "martha", "score": 10000 }, { "index": 0, "candidate": "marhta", "matchKey": "marhta", "score": 9611 } ] }, { "name": "Winkler's DWAYNE/DUANE: exactly 0.84", "args": [ "Dwayne", [ "Duane" ], 0 ], "expect": [ { "index": 0, "candidate": "Duane", "matchKey": "duane", "score": 8400 } ] }, { "name": "Winkler's DIXON/DICKSONX: 0.8133, included at a threshold of 8133", "args": [ "Dixon", [ "Dicksonx" ], 8133 ], "expect": [ { "index": 0, "candidate": "Dicksonx", "matchKey": "dicksonx", "score": 8133 } ] }, { "name": "and excluded one basis point higher", "args": [ "Dixon", [ "Dicksonx" ], 8134 ], "expect": [] }, { "name": "word order does not matter: 'Smith, John' is 'john smith'", "args": [ "John Smith", [ "Smith, John", "SMITH John" ], 10000 ], "expect": [ { "index": 0, "candidate": "Smith, John", "matchKey": "john smith", "score": 10000 }, { "index": 1, "candidate": "SMITH John", "matchKey": "john smith", "score": 10000 } ] }, { "name": "Ltd, Limited and PLC are dropped; equal scores stay in input order", "args": [ "Acme Holdings Limited", [ "Acme Holdings PLC", "ACME HOLDINGS LTD.", "Acme Holdings Ltd" ], 10000 ], "expect": [ { "index": 0, "candidate": "Acme Holdings PLC", "matchKey": "acme holdings", "score": 10000 }, { "index": 1, "candidate": "ACME HOLDINGS LTD.", "matchKey": "acme holdings", "score": 10000 }, { "index": 2, "candidate": "Acme Holdings Ltd", "matchKey": "acme holdings", "score": 10000 } ] }, { "name": "'&' is 'and', and LLP is dropped", "args": [ "Smith & Jones LLP", [ "Smith and Jones" ], 10000 ], "expect": [ { "index": 0, "candidate": "Smith and Jones", "matchKey": "and jones smith", "score": 10000 } ] }, { "name": "apostrophes and full stops vanish: O'Neill is ONeill", "args": [ "O'Neill", [ "ONEILL", "O’Neill" ], 10000 ], "expect": [ { "index": 0, "candidate": "ONEILL", "matchKey": "oneill", "score": 10000 }, { "index": 1, "candidate": "O’Neill", "matchKey": "oneill", "score": 10000 } ] }, { "name": "below Jaro 0.7 there is no prefix boost: Amir/Amos is 6667, not 7333", "args": [ "Amir", [ "Amos" ], 0 ], "expect": [ { "index": 0, "candidate": "Amos", "matchKey": "amos", "score": 6667 } ] }, { "name": "a dropped letter: John/Jon 0.9333", "args": [ "John", [ "Jon" ], 9000 ], "expect": [ { "index": 0, "candidate": "Jon", "matchKey": "jon", "score": 9333 } ] }, { "name": "an empty or form-only candidate scores 0, reported only at threshold 0", "args": [ "John", [ "", "Ltd", "Jon" ], 0 ], "expect": [ { "index": 2, "candidate": "Jon", "matchKey": "jon", "score": 9333 }, { "index": 0, "candidate": "", "matchKey": "", "score": 0 }, { "index": 1, "candidate": "Ltd", "matchKey": "", "score": 0 } ] }, { "name": "accented letters are kept, not folded: José/Jose 0.8833", "args": [ "José", [ "Jose" ], 8000 ], "expect": [ { "index": 0, "candidate": "Jose", "matchKey": "jose", "score": 8833 } ] }, { "name": "best first: higher scores lead regardless of input order", "args": [ "Martha", [ "Dwayne", "marhta", "Martha" ], 9000 ], "expect": [ { "index": 2, "candidate": "Martha", "matchKey": "martha", "score": 10000 }, { "index": 1, "candidate": "marhta", "matchKey": "marhta", "score": 9611 } ] }, { "name": "no candidates, no matches", "args": [ "Anyone", [], 0 ], "expect": [] }, { "name": "a name that normalises to nothing is an error", "args": [ "Ltd.", [ "Acme" ], 8500 ], "expectError": "name is empty after normalising" }, { "name": "a threshold over 10000 is an error", "args": [ "Acme", [ "Acme" ], 10001 ], "expectError": "thresholdBasisPoints must be between 0 and 10000" }, { "name": "a negative threshold is an error", "args": [ "Acme", [ "Acme" ], -1 ], "expectError": "thresholdBasisPoints must be between 0 and 10000" }, { "name": "a name over 500 characters is an error", "args": [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", [ "Acme" ], 8500 ], "expectError": "names must be at most 500 characters after normalising" } ]