Add unit tests for soundex.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sun, 3 Oct 2010 16:14:48 +0000 (18:14 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sun, 3 Oct 2010 16:18:16 +0000 (18:18 +0200)
The goal of this tests is to provide an improved version of the soundex
algorithm in the future.

Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
ut/soundextest.php [new file with mode: 0644]

diff --git a/ut/soundextest.php b/ut/soundextest.php
new file mode 100644 (file)
index 0000000..4624c45
--- /dev/null
@@ -0,0 +1,1053 @@
+<?php
+/***************************************************************************
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+require_once dirname(__FILE__) . '/../include/test.inc.php';
+
+class SoundexTest extends PlTestCase
+{
+    public static function tokenProvider()
+    {
+        /* This list has been generated from a subset of x5dat database using
+         * the following query:
+         *
+         *    SELECT  CONCAT("            '", token, 
+         *                   "' => array('", token, "', '",
+         *                   soundex, "'),")
+         *      FROM  search_name
+         *  GROUP BY  token
+         *  ORDER BY  RAND()
+         *     LIMIT  1000
+         */
+        return array(
+            'baussart' => array('baussart', 'BOS'),
+            'duvernay' => array('duvernay', 'DUVR'),
+            'rozes' => array('rozes', 'ROSS'),
+            'glanic' => array('glanic', 'JLNK'),
+            'blatt' => array('blatt', 'BL'),
+            'benmrad' => array('benmrad', 'BR'),
+            'varin' => array('varin', 'VR1'),
+            'lequerre' => array('lequerre', 'LKR'),
+            'jacquesdenis' => array('jacquesdenis', 'JKSD'),
+            'decrouttedesaintmartin' => array('decrouttedesaintmartin', 'DKRU'),
+            'lhullier' => array('lhullier', 'LULY'),
+            'chopard' => array('chopard', '9OP'),
+            'tellier' => array('tellier', 'TLY'),
+            'brami' => array('brami', 'BRM'),
+            'wiederkehr' => array('wiederkehr', 'VYDR'),
+            'llamas' => array('llamas', 'LMS'),
+            'heurtier' => array('heurtier', 'ERTY'),
+            'bourrette' => array('bourrette', 'BURT'),
+            'darnaud' => array('darnaud', 'DNO'),
+            'sainthillier' => array('sainthillier', 'S1TL'),
+            'brun' => array('brun', 'BR1'),
+            'erussard' => array('erussard', 'ERUS'),
+            'nadaudesislets' => array('nadaudesislets', 'NDOD'),
+            'rafael' => array('rafael', 'RFL'),
+            'francoisrenaud' => array('francoisrenaud', 'FRKO'),
+            'sevag' => array('sevag', 'SVJ'),
+            'deffit' => array('deffit', 'DF'),
+            'desmonts' => array('desmonts', 'DSO'),
+            'cassamchenai' => array('cassamchenai', 'KS9N'),
+            'cayeux' => array('cayeux', 'KU'),
+            'lamit' => array('lamit', 'LM'),
+            'genies' => array('genies', 'JNYS'),
+            'boulier' => array('boulier', 'BULY'),
+            'fengting' => array('fengting', 'FT1J'),
+            'lespinard' => array('lespinard', 'LSPN'),
+            'dechaumontdequitry' => array('dechaumontdequitry', 'D9OM'),
+            'bernadat' => array('bernadat', 'BRND'),
+            'epenoux' => array('epenoux', 'EPNU'),
+            'merlant' => array('merlant', 'MRL'),
+            'philippevictor' => array('philippevictor', 'FLPV'),
+            'phanhung' => array('phanhung', 'F1J'),
+            'mariereau' => array('mariereau', 'MRYR'),
+            'labe' => array('labe', 'LB'),
+            'boschet' => array('boschet', 'BOK'),
+            'jdidi' => array('jdidi', 'JDD'),
+            'nguyenhuy' => array('nguyenhuy', 'NKYU'),
+            'pierrard' => array('pierrard', 'PYR'),
+            'fournand' => array('fournand', 'FUN'),
+            'vamparys' => array('vamparys', 'VPRS'),
+            'zarrouati' => array('zarrouati', 'ZRUT'),
+            'saison' => array('saison', 'SSO'),
+            'couderc' => array('couderc', 'KUDR'),
+            'popeye' => array('popeye', 'POP'),
+            'salasymelia' => array('salasymelia', 'SLSM'),
+            'delcarmen' => array('delcarmen', 'DLKM'),
+            'vanhertsen' => array('vanhertsen', 'VRTS'),
+            'benarousse' => array('benarousse', 'BNRU'),
+            'perotin' => array('perotin', 'PROT'),
+            'thuthuy' => array('thuthuy', 'TUTU'),
+            'auckenthaler' => array('auckenthaler', 'OKTL'),
+            'boutry' => array('boutry', 'BUTR'),
+            'jr' => array('jr', 'JR'),
+            'tallec' => array('tallec', 'TLK'),
+            'segot' => array('segot', 'SKO'),
+            'gaudy' => array('gaudy', 'KOD'),
+            'lahautiere' => array('lahautiere', 'LOTY'),
+            'schoeller' => array('schoeller', 'SKL'),
+            'kreum' => array('kreum', 'KR1'),
+            'lisack' => array('lisack', 'LSK'),
+            'gaume' => array('gaume', 'KOM'),
+            'deplace' => array('deplace', 'DPLS'),
+            'strilka' => array('strilka', 'TRLK'),
+            'flouzat' => array('flouzat', 'FLUS'),
+            'chouvet' => array('chouvet', '9UV'),
+            'desrozes' => array('desrozes', 'DSRO'),
+            'brison' => array('brison', 'BRSO'),
+            'ramos' => array('ramos', 'RMOS'),
+            'meraud' => array('meraud', 'MRO'),
+            'poillion' => array('poillion', 'POLY'),
+            'lagier' => array('lagier', 'LJY'),
+            'creusot' => array('creusot', 'KRSO'),
+            'soufflet' => array('soufflet', 'SUL'),
+            'varagnat' => array('varagnat', 'VRN'),
+            'preval' => array('preval', 'PRVL'),
+            'destival' => array('destival', 'DTVL'),
+            'simonet' => array('simonet', 'SMON'),
+            'bouffet' => array('bouffet', 'BUF'),
+            'deruffi' => array('deruffi', 'DRUF'),
+            'xiaoweiherve' => array('xiaoweiherve', 'XYUR'),
+            'vieillardbaron' => array('vieillardbaron', 'VYLD'),
+            'petry' => array('petry', 'PTR'),
+            'cartalas' => array('cartalas', 'KTLS'),
+            'depaquit' => array('depaquit', 'DPK'),
+            'dommain' => array('dommain', 'DO1'),
+            'alibran' => array('alibran', 'ALBR'),
+            'lajard' => array('lajard', 'LJ'),
+            'virak' => array('virak', 'VRK'),
+            'raveldesclapon' => array('raveldesclapon', 'RVLD'),
+            'hamburger' => array('hamburger', 'ABUJ'),
+            'dunogue' => array('dunogue', 'DUNO'),
+            'nicoletix88' => array('nicoletix88', 'NKOL'),
+            'guyomard' => array('guyomard', 'KYOM'),
+            'kervern' => array('kervern', 'KRVR'),
+            'vandu' => array('vandu', 'VDU'),
+            'kleman' => array('kleman', 'KLM'),
+            'pougindelamaisonneuve' => array('pougindelamaisonneuve', 'PUJ1'),
+            'weisz' => array('weisz', 'VSS'),
+            'couque' => array('couque', 'KUK'),
+            'ling' => array('ling', 'L1J'),
+            'puechberty' => array('puechberty', 'PU9B'),
+            'manceron' => array('manceron', 'MSRO'),
+            'quanghung' => array('quanghung', 'K1J'),
+            'burindesroziers' => array('burindesroziers', 'BUR1'),
+            'pougnator' => array('pougnator', 'PUNT'),
+            'bachelart' => array('bachelart', 'B9L'),
+            'laloy' => array('laloy', 'LLO'),
+            'prieur' => array('prieur', 'PRYU'),
+            'gang' => array('gang', 'KJ'),
+            'hristova' => array('hristova', 'RTOV'),
+            'lutfalla' => array('lutfalla', 'LUTL'),
+            'joffre' => array('joffre', 'JOR'),
+            'klops' => array('klops', 'KLOP'),
+            'delahondes' => array('delahondes', 'DLOD'),
+            'hashemi' => array('hashemi', 'A9M'),
+            'rouah' => array('rouah', 'RU'),
+            'vegnant' => array('vegnant', 'VJN'),
+            'marieastrid' => array('marieastrid', 'MRYT'),
+            'costes' => array('costes', 'KOTS'),
+            'henno' => array('henno', 'ENO'),
+            'vandercruissedewaziers' => array('vandercruissedewaziers', 'VDRK'),
+            'chappedelaine' => array('chappedelaine', '9PDL'),
+            'villecroze' => array('villecroze', 'VLKR'),
+            'namara' => array('namara', 'NMR'),
+            'wilkowski' => array('wilkowski', 'VLKU'),
+            'peslin' => array('peslin', 'PSL1'),
+            'rivollier' => array('rivollier', 'RVOL'),
+            'duclosgrisier' => array('duclosgrisier', 'DULO'),
+            'pougheon' => array('pougheon', 'PU'),
+            'long' => array('long', 'LOJ'),
+            'devernay' => array('devernay', 'DVRN'),
+            'anastasia' => array('anastasia', 'ANTS'),
+            'yiyi' => array('yiyi', 'YY'),
+            'pellereau' => array('pellereau', 'PLRO'),
+            'luongthesieu' => array('luongthesieu', 'LUOJ'),
+            'espitaliernoel' => array('espitaliernoel', 'ESPT'),
+            'issernio' => array('issernio', 'YSRN'),
+            'lechapelain' => array('lechapelain', 'L9PL'),
+            'tesson' => array('tesson', 'TSO'),
+            'abdelali' => array('abdelali', 'ADLL'),
+            'lamort' => array('lamort', 'LMO'),
+            'coquebertdeneuville' => array('coquebertdeneuville', 'KOKB'),
+            'travers' => array('travers', 'TRVR'),
+            'gueyffier' => array('gueyffier', 'KFY'),
+            'hecquet' => array('hecquet', 'EK'),
+            'sersouri' => array('sersouri', 'SRUR'),
+            'vittorio' => array('vittorio', 'VTOR'),
+            'deforge' => array('deforge', 'DFOJ'),
+            'louisnicolas' => array('louisnicolas', 'LUSN'),
+            'jachiet' => array('jachiet', 'J9Y'),
+            'bellynck' => array('bellynck', 'BLNK'),
+            'legallic' => array('legallic', 'LKLK'),
+            'gaillardon' => array('gaillardon', 'KLDO'),
+            'chasles' => array('chasles', '9LS'),
+            'prophete' => array('prophete', 'PROF'),
+            'lakem' => array('lakem', 'LK'),
+            'schlosser' => array('schlosser', 'SKLO'),
+            'jess' => array('jess', 'JS'),
+            'boeda' => array('boeda', 'BD'),
+            'pitch' => array('pitch', 'PT9'),
+            'antonio' => array('antonio', 'ATON'),
+            'marienoelle' => array('marienoelle', 'MRYN'),
+            'boumendil' => array('boumendil', 'BUMD'),
+            'fransen' => array('fransen', 'FRS'),
+            'marduel' => array('marduel', 'MDUL'),
+            'jeanneret' => array('jeanneret', 'JNR'),
+            'thieffry' => array('thieffry', 'TYFR'),
+            'grandclement' => array('grandclement', 'JRKL'),
+            'guimbal' => array('guimbal', 'K1BL'),
+            'landouer' => array('landouer', 'LDU'),
+            'armier' => array('armier', 'AMY'),
+            'sobieski' => array('sobieski', 'SOBY'),
+            'faninger' => array('faninger', 'FJ'),
+            'maumy' => array('maumy', 'MOM'),
+            'elisa' => array('elisa', 'ELS'),
+            'ragot' => array('ragot', 'RKO'),
+            'dubarry' => array('dubarry', 'DUBR'),
+            'delias' => array('delias', 'DLYS'),
+            'zolti' => array('zolti', 'ZOLT'),
+            'magnien' => array('magnien', 'MNY'),
+            'demael' => array('demael', 'DML'),
+            'folco' => array('folco', 'FOLK'),
+            'kantchelian' => array('kantchelian', 'KT9L'),
+            'jeanlin' => array('jeanlin', 'JL1'),
+            'martelet' => array('martelet', 'MTL'),
+            'popineaudehaullon' => array('popineaudehaullon', 'POPN'),
+            'defougeres' => array('defougeres', 'DFUJ'),
+            'philippo' => array('philippo', 'FLPO'),
+            'markwitz' => array('markwitz', 'MKVT'),
+            'guiset' => array('guiset', 'KS'),
+            '/jagbil' => array('/jagbil', 'JBL'),
+            'paulivan' => array('paulivan', 'POLV'),
+            'delacour' => array('delacour', 'DLKU'),
+            'baesen' => array('baesen', 'BS'),
+            'thery' => array('thery', 'TR'),
+            'pons' => array('pons', 'POS'),
+            'clocheret' => array('clocheret', 'KLO9'),
+            'prost' => array('prost', 'PRO'),
+            'woringer' => array('woringer', 'VOR1'),
+            'djamal' => array('djamal', 'DML'),
+            'auguste' => array('auguste', 'OKT'),
+            'lagrandiere' => array('lagrandiere', 'LRDY'),
+            'angelopoulos' => array('angelopoulos', 'AJLO'),
+            'lunet' => array('lunet', 'LUN'),
+            'couture' => array('couture', 'KUTU'),
+            'huang' => array('huang', 'UJ'),
+            'trinckvel' => array('trinckvel', 'TR1K'),
+            'laroque' => array('laroque', 'LROK'),
+            'guillanton' => array('guillanton', 'KLTO'),
+            'namer' => array('namer', 'NM'),
+            'laurene' => array('laurene', 'LORN'),
+            'marchandmaillet' => array('marchandmaillet', 'MRML'),
+            'mei' => array('mei', 'M'),
+            'crouzat' => array('crouzat', 'KRUS'),
+            'larque' => array('larque', 'LK'),
+            'heron' => array('heron', 'ERO'),
+            'ridoret' => array('ridoret', 'RDOR'),
+            'martingilles' => array('martingilles', 'MT1J'),
+            'denardou' => array('denardou', 'DNDU'),
+            'bailler' => array('bailler', 'BL'),
+            'thovert' => array('thovert', 'TOVR'),
+            'vaireaux' => array('vaireaux', 'VRO'),
+            'gardon' => array('gardon', 'KDO'),
+            'tison' => array('tison', 'TSO'),
+            'mh' => array('mh', 'M'),
+            'berthet' => array('berthet', 'BRT'),
+            'ennequin' => array('ennequin', 'ENK1'),
+            'piau' => array('piau', 'PYO'),
+            'guilherme' => array('guilherme', 'KLRM'),
+            'lombard' => array('lombard', 'LOB'),
+            'beret' => array('beret', 'BR'),
+            'pougnaud' => array('pougnaud', 'PUNO'),
+            'gillette' => array('gillette', 'JLT'),
+            'betro' => array('betro', 'BTRO'),
+            'binh' => array('binh', 'B1'),
+            'lemma' => array('lemma', 'LM'),
+            'montal' => array('montal', 'MOTL'),
+            'akl' => array('akl', 'AKL'),
+            'duc' => array('duc', 'DUK'),
+            'nirina' => array('nirina', 'NRN'),
+            'pioch' => array('pioch', 'PYO9'),
+            'quitry' => array('quitry', 'KTR'),
+            'silvant' => array('silvant', 'SL'),
+            'houssin' => array('houssin', 'US1'),
+            'schmitz' => array('schmitz', 'SKMT'),
+            'delevoye' => array('delevoye', 'DLVO'),
+            'netumieres' => array('netumieres', 'NTUM'),
+            'burchila' => array('burchila', 'BU9L'),
+            'franchini' => array('franchini', 'FR9N'),
+            'devillele' => array('devillele', 'DVLL'),
+            'goellner' => array('goellner', 'KLN'),
+            'eglin' => array('eglin', 'EJL1'),
+            'bocquet' => array('bocquet', 'BOK'),
+            'michou' => array('michou', 'M9U'),
+            'adnene' => array('adnene', 'ANN'),
+            'pouyet' => array('pouyet', 'PUY'),
+            'limouse' => array('limouse', 'LMUS'),
+            'azambre' => array('azambre', 'ASR'),
+            'rouquet' => array('rouquet', 'RUK'),
+            'lesort' => array('lesort', 'LSO'),
+            'johanna' => array('johanna', 'JON'),
+            'deschiron' => array('deschiron', 'DSKR'),
+            'bauzil' => array('bauzil', 'BOSL'),
+            'vaujour' => array('vaujour', 'VOJU'),
+            'pont' => array('pont', 'PO'),
+            'foiret' => array('foiret', 'FOR'),
+            'lauga' => array('lauga', 'LOK'),
+            'decazenove' => array('decazenove', 'DKSN'),
+            'murretlabarthe' => array('murretlabarthe', 'MURT'),
+            'guen' => array('guen', 'K'),
+            'jmel' => array('jmel', 'JML'),
+            'cabessa' => array('cabessa', 'KBS'),
+            'carlioz' => array('carlioz', 'KLYO'),
+            'flichy' => array('flichy', 'FL9'),
+            'sauzay' => array('sauzay', 'SOS'),
+            'devictor' => array('devictor', 'DVKT'),
+            'brisac' => array('brisac', 'BRSK'),
+            'dhordain' => array('dhordain', 'DOD1'),
+            'tenne' => array('tenne', 'TN'),
+            'alexandrejacques' => array('alexandrejacques', 'ALXR'),
+            'dubanton' => array('dubanton', 'DUBT'),
+            'ghilini' => array('ghilini', 'JLN'),
+            'lachapelle' => array('lachapelle', 'L9PL'),
+            'nyegaard' => array('nyegaard', 'NYK'),
+            'champsaur' => array('champsaur', '9POR'),
+            'darco' => array('darco', 'DKO'),
+            'duffpereira' => array('duffpereira', 'DUPR'),
+            'barbesant' => array('barbesant', 'BBS'),
+            'josso' => array('josso', 'JOSO'),
+            'lavaill' => array('lavaill', 'LVL'),
+            'nizery' => array('nizery', 'NSR'),
+            'herlin' => array('herlin', 'ERL1'),
+            'cassier' => array('cassier', 'KSY'),
+            'cleirec' => array('cleirec', 'KLRK'),
+            'mathurin' => array('mathurin', 'MTUR'),
+            'miguel' => array('miguel', 'MKL'),
+            'othmane' => array('othmane', 'OTN'),
+            'dam' => array('dam', 'D'),
+            'chretien' => array('chretien', '9RTY'),
+            'ortolo' => array('ortolo', 'OTOL'),
+            'pelouze' => array('pelouze', 'PLUS'),
+            'zylberberg' => array('zylberberg', 'ZLBR'),
+            'taki' => array('taki', 'TK'),
+            'pardigon' => array('pardigon', 'PDKO'),
+            'dezandee' => array('dezandee', 'DSD'),
+            'herman' => array('herman', 'ERM'),
+            'sornin' => array('sornin', 'SON1'),
+            'nguyenxuan' => array('nguyenxuan', 'NKYX'),
+            'cipriani' => array('cipriani', 'SPRY'),
+            'bravocortes' => array('bravocortes', 'BRVO'),
+            'khamlichi' => array('khamlichi', 'KL9'),
+            'gobalakichena' => array('gobalakichena', 'KOBL'),
+            'popovics' => array('popovics', 'POPO'),
+            'bigueure' => array('bigueure', 'BKR'),
+            'dubouchauddumazaubrun' => array('dubouchauddumazaubrun', 'DUBU'),
+            'ernst' => array('ernst', 'ERN'),
+            'mouline' => array('mouline', 'MULN'),
+            'itie' => array('itie', 'YTY'),
+            'bonnault' => array('bonnault', 'BONO'),
+            'valabregue' => array('valabregue', 'VLRK'),
+            'moline' => array('moline', 'MOLN'),
+            'minot' => array('minot', 'MNO'),
+            'nahon' => array('nahon', 'NO'),
+            'minjon' => array('minjon', 'M1JO'),
+            'auclerc' => array('auclerc', 'OLRK'),
+            'deconihout' => array('deconihout', 'DKON'),
+            'marliave' => array('marliave', 'MLYV'),
+            'nina' => array('nina', 'NN'),
+            'lacombeallard' => array('lacombeallard', 'LKOB'),
+            'duffau' => array('duffau', 'DUFO'),
+            'seyedmehdi' => array('seyedmehdi', 'SDMD'),
+            'fayein' => array('fayein', 'F1'),
+            'moriniere' => array('moriniere', 'MORN'),
+            'canetti' => array('canetti', 'KNT'),
+            'esteulle' => array('esteulle', 'ETL'),
+            'flender' => array('flender', 'FLD'),
+            'derubay' => array('derubay', 'DRUB'),
+            'saintpaul' => array('saintpaul', 'S1TP'),
+            'hueber' => array('hueber', 'UB'),
+            'jeanchristophe' => array('jeanchristophe', 'J9RT'),
+            'pierrem' => array('pierrem', 'PYR'),
+            'gonzague' => array('gonzague', 'KOSK'),
+            'willk' => array('willk', 'VLK'),
+            'depitray' => array('depitray', 'DPTR'),
+            'azemard' => array('azemard', 'ASM'),
+            'demollerat' => array('demollerat', 'DMOL'),
+            'nouailhetas' => array('nouailhetas', 'NULT'),
+            'rizk' => array('rizk', 'RSK'),
+            'durandgasselin' => array('durandgasselin', 'DURK'),
+            'yvergniaux' => array('yvergniaux', 'YVRJ'),
+            'rosier' => array('rosier', 'ROSY'),
+            'launeau' => array('launeau', 'LONO'),
+            'schmautz' => array('schmautz', 'SKOT'),
+            'antonietti' => array('antonietti', 'ATON'),
+            'bouty' => array('bouty', 'BUT'),
+            'glorieux' => array('glorieux', 'JLOR'),
+            'buche' => array('buche', 'BU9'),
+            'aouad' => array('aouad', 'AU'),
+            'luisfelipe' => array('luisfelipe', 'LUSF'),
+            'aitomar' => array('aitomar', 'ETOM'),
+            'bussac' => array('bussac', 'BUSK'),
+            'abdesselam' => array('abdesselam', 'ADSL'),
+            'caraux' => array('caraux', 'KRO'),
+            'chenot' => array('chenot', '9NO'),
+            'sousselier' => array('sousselier', 'SUSL'),
+            'wertz' => array('wertz', 'VRTS'),
+            'fay' => array('fay', 'F'),
+            'heringer' => array('heringer', 'ER1J'),
+            'voreux' => array('voreux', 'VOR'),
+            'salle' => array('salle', 'SL'),
+            'moiselet' => array('moiselet', 'MOSL'),
+            'leguay' => array('leguay', 'LK'),
+            'bosc' => array('bosc', 'BOK'),
+            'welsch' => array('welsch', 'VLSK'),
+            'dullieux' => array('dullieux', 'DULY'),
+            'bidi' => array('bidi', 'BD'),
+            'viollet' => array('viollet', 'VYOL'),
+            'hayat' => array('hayat', 'E'),
+            'beust' => array('beust', 'B'),
+            'chaugny' => array('chaugny', '9ON'),
+            'debs' => array('debs', 'DBS'),
+            'castaing' => array('castaing', 'KT1J'),
+            'frenay' => array('frenay', 'FRN'),
+            'depontevesgevaudan' => array('depontevesgevaudan', 'DPOT'),
+            'ramin' => array('ramin', 'R1'),
+            'demarre' => array('demarre', 'DMR'),
+            'bronoel' => array('bronoel', 'BRON'),
+            'wilz' => array('wilz', 'VLS'),
+            'vaquin' => array('vaquin', 'VK1'),
+            'bertinetto' => array('bertinetto', 'BRTN'),
+            'boum' => array('boum', 'BO1'),
+            'fostan' => array('fostan', 'FOT'),
+            'mondoncancel' => array('mondoncancel', 'MODO'),
+            'tonon' => array('tonon', 'TONO'),
+            'elizei' => array('elizei', 'ELS'),
+            'lelaie' => array('lelaie', 'LL'),
+            'mosnier' => array('mosnier', 'MONY'),
+            'fron' => array('fron', 'FRO'),
+            'porcherot' => array('porcherot', 'PO9R'),
+            'teissierducros' => array('teissierducros', 'TSYR'),
+            'delphine' => array('delphine', 'DLFN'),
+            'coignard' => array('coignard', 'KONR'),
+            'robi' => array('robi', 'ROB'),
+            'vadot' => array('vadot', 'VDO'),
+            'libois' => array('libois', 'LBOS'),
+            'majdi' => array('majdi', 'MD'),
+            'fillain' => array('fillain', 'FL1'),
+            'boissin' => array('boissin', 'BOS1'),
+            'ripken' => array('ripken', 'RPK'),
+            'gaisset' => array('gaisset', 'KS'),
+            'cam' => array('cam', 'K'),
+            'delong' => array('delong', 'DLOJ'),
+            'marieclaire' => array('marieclaire', 'MRYK'),
+            'nelson' => array('nelson', 'NLSO'),
+            'cosmao' => array('cosmao', 'KOMO'),
+            'pertuiset' => array('pertuiset', 'PRTU'),
+            'delarminat' => array('delarminat', 'DLMN'),
+            'laloum' => array('laloum', 'LLO1'),
+            'lugan' => array('lugan', 'LUK'),
+            'alterwain' => array('alterwain', 'ALTR'),
+            'delabrosse' => array('delabrosse', 'DLRO'),
+            'minato' => array('minato', 'MNTO'),
+            'lasseigne' => array('lasseigne', 'LSJN'),
+            'clementine' => array('clementine', 'KLMT'),
+            'borgoltz' => array('borgoltz', 'BOKO'),
+            'rollandfoxonet' => array('rollandfoxonet', 'ROLD'),
+            'tenenbaum' => array('tenenbaum', 'TNBO'),
+            'madeleine' => array('madeleine', 'MDLN'),
+            'villemarceau' => array('villemarceau', 'VLMS'),
+            'turlan' => array('turlan', 'TUL'),
+            'gourseau' => array('gourseau', 'KUSO'),
+            'pitrat' => array('pitrat', 'PTR'),
+            'perigaud' => array('perigaud', 'PRKO'),
+            'fassi' => array('fassi', 'FS'),
+            'sorin' => array('sorin', 'SOR1'),
+            'manuel' => array('manuel', 'MNUL'),
+            'souleau' => array('souleau', 'SULO'),
+            'ainval' => array('ainval', '1VL'),
+            'jumel' => array('jumel', 'JUML'),
+            'jer' => array('jer', 'J'),
+            'riche' => array('riche', 'R9'),
+            'bresson' => array('bresson', 'BRSO'),
+            'dauge' => array('dauge', 'DOJ'),
+            'abastado' => array('abastado', 'ABTD'),
+            'romdhane' => array('romdhane', 'RODN'),
+            'bouhanna' => array('bouhanna', 'BUN'),
+            'dochez' => array('dochez', 'DO9S'),
+            'cesare' => array('cesare', 'SSR'),
+            'henni' => array('henni', 'EN'),
+            'ly' => array('ly', 'L'),
+            'delavelle' => array('delavelle', 'DLVL'),
+            'trognon' => array('trognon', 'TRON'),
+            'kanard' => array('kanard', 'KN'),
+            'mamoune' => array('mamoune', 'MMUN'),
+            'devignesdepuylaroque' => array('devignesdepuylaroque', 'DVJN'),
+            'bo' => array('bo', 'BO'),
+            'botereau' => array('botereau', 'BOTR'),
+            'montreynaud' => array('montreynaud', 'MOTR'),
+            'jonas' => array('jonas', 'JONS'),
+            'ccc' => array('ccc', 'KK'),
+            'gwossetuwlute' => array('gwossetuwlute', 'JOST'),
+            'lechanteux' => array('lechanteux', 'L9T'),
+            'coulogner' => array('coulogner', 'KULO'),
+            'elyoubi' => array('elyoubi', 'ELYU'),
+            'lacruzweinstein' => array('lacruzweinstein', 'LRUS'),
+            'anhhoa' => array('anhhoa', 'AO'),
+            'cadilhac' => array('cadilhac', 'KDLK'),
+            'chancel' => array('chancel', '9SL'),
+            'mahony' => array('mahony', 'MON'),
+            'girolami' => array('girolami', 'JROL'),
+            'gothie' => array('gothie', 'KOTY'),
+            'pignault' => array('pignault', 'PJNO'),
+            'rojobravo' => array('rojobravo', 'ROJO'),
+            'malleus' => array('malleus', 'MLS'),
+            'letournel' => array('letournel', 'LTUN'),
+            'rochat' => array('rochat', 'RO9'),
+            'patou' => array('patou', 'PTU'),
+            'delongraye' => array('delongraye', 'DLOR'),
+            'pitois' => array('pitois', 'PTOS'),
+            'lapierre' => array('lapierre', 'LPYR'),
+            'cichostepski' => array('cichostepski', 'S9OT'),
+            'romon' => array('romon', 'ROMO'),
+            'courtecuisse' => array('courtecuisse', 'KUTK'),
+            'dufournier' => array('dufournier', 'DUFU'),
+            'marsouin' => array('marsouin', 'MRU1'),
+            'engrand' => array('engrand', 'AR'),
+            'allehaux' => array('allehaux', 'ALO'),
+            'dargham' => array('dargham', 'DJ'),
+            'rouvillois' => array('rouvillois', 'RUVL'),
+            'silberzahn' => array('silberzahn', 'SLBR'),
+            'guillemont' => array('guillemont', 'KLMO'),
+            'ouahab' => array('ouahab', 'UB'),
+            'balme' => array('balme', 'BLM'),
+            'aujoux' => array('aujoux', 'OJU'),
+            'gatteau' => array('gatteau', 'KTO'),
+            'mordo' => array('mordo', 'MODO'),
+            'deboursetty' => array('deboursetty', 'DBUS'),
+            'bornsztein' => array('bornsztein', 'BONS'),
+            'subra' => array('subra', 'SUR'),
+            'larcan' => array('larcan', 'LK'),
+            'colleville' => array('colleville', 'KOLV'),
+            'mahfouz' => array('mahfouz', 'MUS'),
+            'duray' => array('duray', 'DUR'),
+            'calf' => array('calf', 'KLF'),
+            'estassy' => array('estassy', 'ETS'),
+            'grison' => array('grison', 'JRSO'),
+            'belmahi' => array('belmahi', 'BL'),
+            'aulnois' => array('aulnois', 'OLNO'),
+            'lucille' => array('lucille', 'LUSL'),
+            'munoa' => array('munoa', 'MUNO'),
+            'bouzige' => array('bouzige', 'BUSJ'),
+            'pourcin' => array('pourcin', 'PUK1'),
+            'delhomme' => array('delhomme', 'DLOM'),
+            'stablo' => array('stablo', 'TLO'),
+            'radvanyi' => array('radvanyi', 'RDNY'),
+            'piechaczyk' => array('piechaczyk', 'PY9S'),
+            'cyffers' => array('cyffers', 'SFRS'),
+            'charoy' => array('charoy', '9RO'),
+            'khemakhem' => array('khemakhem', 'KMK'),
+            'mazziotto' => array('mazziotto', 'MSYO'),
+            'arribehaute' => array('arribehaute', 'ARBO'),
+            'petitpre' => array('petitpre', 'PTTP'),
+            'pichat' => array('pichat', 'P9'),
+            'hautecloqueraysz' => array('hautecloqueraysz', 'OTKL'),
+            'dmytro' => array('dmytro', 'DMTR'),
+            'minni' => array('minni', 'MN'),
+            'loustau' => array('loustau', 'LUTO'),
+            'goucha' => array('goucha', 'KU9'),
+            'copello' => array('copello', 'KOPL'),
+            'hirtzman' => array('hirtzman', 'YRTS'),
+            'barcon' => array('barcon', 'BKO'),
+            'ballus' => array('ballus', 'BLUS'),
+            'pariselle' => array('pariselle', 'PRSL'),
+            'alainjoseph' => array('alainjoseph', 'AL1J'),
+            'aime' => array('aime', 'EM'),
+            'vuaille' => array('vuaille', 'VUL'),
+            'flobert' => array('flobert', 'FLOB'),
+            'hallopeau' => array('hallopeau', 'ALOP'),
+            'suquet' => array('suquet', 'SUK'),
+            'vigneron' => array('vigneron', 'VJNR'),
+            'heringerjallot' => array('heringerjallot', 'ER1J'),
+            'verseux' => array('verseux', 'VRS'),
+            'dongwon' => array('dongwon', 'DOVO'),
+            'desereville' => array('desereville', 'DSRV'),
+            'guittonneau' => array('guittonneau', 'KTON'),
+            'laforgue' => array('laforgue', 'LFOK'),
+            'jamet' => array('jamet', 'JM'),
+            'dechampfleur' => array('dechampfleur', 'D9PF'),
+            'fuentessolana' => array('fuentessolana', 'FUTS'),
+            'delage' => array('delage', 'DLJ'),
+            'odile' => array('odile', 'ODL'),
+            'alireza' => array('alireza', 'ALRS'),
+            'druelle' => array('druelle', 'DRUL'),
+            'prebay' => array('prebay', 'PRB'),
+            'marelle' => array('marelle', 'MRL'),
+            'lepine' => array('lepine', 'LPN'),
+            'grimond' => array('grimond', 'JRMO'),
+            'tescher' => array('tescher', 'TSK'),
+            'cardot' => array('cardot', 'KRO'),
+            'couprie' => array('couprie', 'KUPR'),
+            'desprets' => array('desprets', 'DSPR'),
+            'cuvelier' => array('cuvelier', 'KUVL'),
+            'ledoare' => array('ledoare', 'LDOR'),
+            'fantin' => array('fantin', 'FT1'),
+            'sweelongkevin' => array('sweelongkevin', 'SVLO'),
+            'kawabe' => array('kawabe', 'KVB'),
+            'josephantoine' => array('josephantoine', 'JOSF'),
+            'ermias' => array('ermias', 'ERMY'),
+            'baujat' => array('baujat', 'BOJ'),
+            'khuatduy' => array('khuatduy', 'KUTD'),
+            'quocanh' => array('quocanh', 'KOK'),
+            'prostdame' => array('prostdame', 'PROT'),
+            'chave' => array('chave', '9V'),
+            'devilliers' => array('devilliers', 'DVLY'),
+            'letourneur' => array('letourneur', 'LTUN'),
+            'peard' => array('peard', 'PR'),
+            'ngoduc' => array('ngoduc', 'NKOD'),
+            'delteil' => array('delteil', 'DLTL'),
+            'ramzi' => array('ramzi', 'RS'),
+            'oterodelval' => array('oterodelval', 'OTRO'),
+            'madelenat' => array('madelenat', 'MDLN'),
+            'ric' => array('ric', 'RK'),
+            'shark' => array('shark', '9K'),
+            'martinezdealbeniz' => array('martinezdealbeniz', 'MTNS'),
+            'mangenot' => array('mangenot', 'MJNO'),
+            'boutillon' => array('boutillon', 'BUTL'),
+            'bigeon' => array('bigeon', 'BJ'),
+            'prange' => array('prange', 'PRJ'),
+            'voutsinossvilarich' => array('voutsinossvilarich', 'VUTS'),
+            'ithier' => array('ithier', 'YTY'),
+            'chanet' => array('chanet', '9N'),
+            'nivat' => array('nivat', 'NV'),
+            'correasantos' => array('correasantos', 'KORS'),
+            'blion' => array('blion', 'BLYO'),
+            'yiqing' => array('yiqing', 'YK1J'),
+            'puchercos' => array('puchercos', 'PU9R'),
+            'jourde' => array('jourde', 'JUD'),
+            'pierremarie' => array('pierremarie', 'PYRM'),
+            'briquet' => array('briquet', 'BRK'),
+            'lenir' => array('lenir', 'LNR'),
+            'nicholas' => array('nicholas', 'N9OL'),
+            'burgess' => array('burgess', 'BUJS'),
+            'monclar' => array('monclar', 'MOLR'),
+            'ptilouis' => array('ptilouis', 'PTLU'),
+            'paimboeuf' => array('paimboeuf', 'P1BF'),
+            'galloy' => array('galloy', 'KLO'),
+            'corderoydutiers' => array('corderoydutiers', 'KODR'),
+            'soupizet' => array('soupizet', 'SUPS'),
+            'alaouiyazidi' => array('alaouiyazidi', 'ALUY'),
+            'tignol' => array('tignol', 'TJNO'),
+            'laftit' => array('laftit', 'LT'),
+            'haberer' => array('haberer', 'ABR'),
+            'dobra' => array('dobra', 'DOR'),
+            'voorde' => array('voorde', 'VOD'),
+            'truchetto' => array('truchetto', 'TRU9'),
+            'megret' => array('megret', 'MJR'),
+            'vandemaele' => array('vandemaele', 'VDML'),
+            'dimeglio' => array('dimeglio', 'DMJL'),
+            'korty' => array('korty', 'KOT'),
+            'piaton' => array('piaton', 'PYTO'),
+            'lubek' => array('lubek', 'LUBK'),
+            'ruoyun' => array('ruoyun', 'RUO1'),
+            'balufin' => array('balufin', 'BLUF'),
+            'valperguedemasin' => array('valperguedemasin', 'VLPR'),
+            'remonbeauvais' => array('remonbeauvais', 'RMOB'),
+            'letki' => array('letki', 'LTK'),
+            'widhoff' => array('widhoff', 'VDOF'),
+            'vaquier' => array('vaquier', 'VKY'),
+            'siegler' => array('siegler', 'SYJL'),
+            'tranchevent' => array('tranchevent', 'TR9V'),
+            'pioupiou' => array('pioupiou', 'PYUP'),
+            'revellat' => array('revellat', 'RVL'),
+            'lebourgeois' => array('lebourgeois', 'LBUJ'),
+            'ferre' => array('ferre', 'FR'),
+            'convertlalanne' => array('convertlalanne', 'KOVR'),
+            'jeanhenri' => array('jeanhenri', 'JR'),
+            'roubinet' => array('roubinet', 'RUBN'),
+            'aldea' => array('aldea', 'ALD'),
+            'lou' => array('lou', 'LU'),
+            'guygrand' => array('guygrand', 'KJR'),
+            'litzler' => array('litzler', 'LTSL'),
+            'chavigner' => array('chavigner', '9VJN'),
+            'purcha' => array('purcha', 'PU9'),
+            'santos' => array('santos', 'STOS'),
+            'sombrero' => array('sombrero', 'SORR'),
+            'dekouchkovsky' => array('dekouchkovsky', 'DKUK'),
+            'kieffel' => array('kieffel', 'KYFL'),
+            'fouquieres' => array('fouquieres', 'FUKY'),
+            'coureaud' => array('coureaud', 'KURO'),
+            'scetbun' => array('scetbun', 'STB1'),
+            'viarisdelesegno' => array('viarisdelesegno', 'VYRS'),
+            'delbove' => array('delbove', 'DLOV'),
+            'adnane' => array('adnane', 'ANN'),
+            'perfezou' => array('perfezou', 'PRFS'),
+            'eliane' => array('eliane', 'ELYN'),
+            'amaraldeandradesophia' => array('amaraldeandradesophia', 'AMRL'),
+            'tremblin' => array('tremblin', 'TRL1'),
+            'pierreetienne' => array('pierreetienne', 'PYRT'),
+            'corbu' => array('corbu', 'KOBU'),
+            'lachuite,tchemba' => array('lachuite,tchemba', 'L9UT'),
+            'bonnefon' => array('bonnefon', 'BONF'),
+            'knoche' => array('knoche', 'NO9'),
+            'haller' => array('haller', 'AL'),
+            'nolde' => array('nolde', 'NOLD'),
+            'craon' => array('craon', 'KR'),
+            'caurier' => array('caurier', 'KORY'),
+            'duchaussoy' => array('duchaussoy', 'DU9O'),
+            'bozec' => array('bozec', 'BOSK'),
+            'debeauregard' => array('debeauregard', 'DBOR'),
+            'blum' => array('blum', 'BL1'),
+            'gajic' => array('gajic', 'KJK'),
+            'kinapara' => array('kinapara', 'KNPR'),
+            'barbierdelaserre' => array('barbierdelaserre', 'BBYR'),
+            'thang' => array('thang', 'TJ'),
+            'fonade' => array('fonade', 'FOND'),
+            'majnonidintignano' => array('majnonidintignano', 'MNON'),
+            'benkheiri' => array('benkheiri', 'BKR'),
+            'rochefort' => array('rochefort', 'RO9F'),
+            'falezan' => array('falezan', 'FLS'),
+            'granade' => array('granade', 'JRND'),
+            'toufik' => array('toufik', 'TUFK'),
+            '137' => array('137', ''),
+            'boutot' => array('boutot', 'BUTO'),
+            'heckel' => array('heckel', 'EKL'),
+            'xandrex' => array('xandrex', 'XR'),
+            'rheims' => array('rheims', 'R1S'),
+            'piponnier' => array('piponnier', 'PPON'),
+            'dossin' => array('dossin', 'DOS1'),
+            'deltheil' => array('deltheil', 'DLTL'),
+            'bernicot' => array('bernicot', 'BRNK'),
+            'annemarie' => array('annemarie', 'ANMR'),
+            'hannothiaux' => array('hannothiaux', 'ANOT'),
+            'namias' => array('namias', 'NMYS'),
+            'artzner' => array('artzner', 'ATSN'),
+            'charrier' => array('charrier', '9RY'),
+            'commelin' => array('commelin', 'KOML'),
+            'pochard' => array('pochard', 'PO9'),
+            'duhil' => array('duhil', 'DUL'),
+            'duchatte' => array('duchatte', 'DU9T'),
+            'delatte' => array('delatte', 'DLT'),
+            'ruizdearcaute' => array('ruizdearcaute', 'RUSD'),
+            'huitema' => array('huitema', 'UTM'),
+            'demerliac' => array('demerliac', 'DMRL'),
+            'delafoye' => array('delafoye', 'DLFO'),
+            'ruelle' => array('ruelle', 'RUL'),
+            'savey' => array('savey', 'SV'),
+            'sarrabezolles' => array('sarrabezolles', 'SRBS'),
+            'guth' => array('guth', 'K'),
+            'boissonnat' => array('boissonnat', 'BOSO'),
+            'zoinx' => array('zoinx', 'ZO'),
+            'onno' => array('onno', 'ONO'),
+            'queru' => array('queru', 'KRU'),
+            'galbe' => array('galbe', 'KLB'),
+            'lauriston' => array('lauriston', 'LORT'),
+            'loubensdeverdalle' => array('loubensdeverdalle', 'LUBD'),
+            'chabrier' => array('chabrier', '9RY'),
+            'molliens' => array('molliens', 'MOLY'),
+            'heuclin' => array('heuclin', 'EKL1'),
+            'averous' => array('averous', 'AVRU'),
+            'sauvel' => array('sauvel', 'SOVL'),
+            'caherec' => array('caherec', 'KRK'),
+            'lheriau' => array('lheriau', 'LRYO'),
+            'gauchard' => array('gauchard', 'KO9'),
+            'benabed' => array('benabed', 'BNB'),
+            'dfm' => array('dfm', 'DFM'),
+            'dhose' => array('dhose', 'DOS'),
+            'edern' => array('edern', 'EDRN'),
+            'fleuret' => array('fleuret', 'FLR'),
+            'maffiberthier' => array('maffiberthier', 'MFBR'),
+            'campagneibarcq' => array('campagneibarcq', 'KPNB'),
+            'beguin' => array('beguin', 'BK1'),
+            'hihi' => array('hihi', 'Y'),
+            'tournat' => array('tournat', 'TUN'),
+            'plusquellec' => array('plusquellec', 'PLUK'),
+            'ruelland' => array('ruelland', 'RUL'),
+            'delachevasnerie' => array('delachevasnerie', 'DL9V'),
+            'benaclestrille' => array('benaclestrille', 'BNLT'),
+            'chazy' => array('chazy', '9S'),
+            'yeung' => array('yeung', 'Y1J'),
+            'frois' => array('frois', 'FROS'),
+            'lamon' => array('lamon', 'LMO'),
+            'noemie' => array('noemie', 'NMY'),
+            'otmane' => array('otmane', 'OTN'),
+            'gisserot' => array('gisserot', 'JSRO'),
+            'pelissiedurausas' => array('pelissiedurausas', 'PLSY'),
+            'morice' => array('morice', 'MORS'),
+            'marechaldereu' => array('marechaldereu', 'MR9L'),
+            'isam' => array('isam', 'YS'),
+            'estelle' => array('estelle', 'ETL'),
+            'arnaudon' => array('arnaudon', 'ANOD'),
+            'thier' => array('thier', 'TY'),
+            'weisslinger' => array('weisslinger', 'VSL1'),
+            'boss' => array('boss', 'BOS'),
+            'hau' => array('hau', 'O'),
+            'logie' => array('logie', 'LOJY'),
+            'aurengo' => array('aurengo', 'ORKO'),
+            'luciano' => array('luciano', 'LUSY'),
+            'domallain' => array('domallain', 'DOML'),
+            'ohman' => array('ohman', 'OM'),
+            'somdecoste' => array('somdecoste', 'SODK'),
+            'gentil' => array('gentil', 'JTL'),
+            'decerisy' => array('decerisy', 'DSRS'),
+            'guegano' => array('guegano', 'KKNO'),
+            'bourgeot' => array('bourgeot', 'BUJO'),
+            'tchangue' => array('tchangue', 'TK'),
+            'mahmoud' => array('mahmoud', 'MU'),
+            'camilier' => array('camilier', 'KMLY'),
+            'neudin' => array('neudin', 'ND1'),
+            'lacharnay' => array('lacharnay', 'L9N'),
+            'goliger' => array('goliger', 'KOLJ'),
+            'zampa' => array('zampa', 'ZP'),
+            'shams' => array('shams', '9S'),
+            'lavole' => array('lavole', 'LVOL'),
+            'descours' => array('descours', 'DSKU'),
+            'boulaye' => array('boulaye', 'BUL'),
+            'bieth' => array('bieth', 'BY'),
+            'savannet' => array('savannet', 'SVN'),
+            'zidi' => array('zidi', 'ZD'),
+            'monceaux' => array('monceaux', 'MOSO'),
+            'schulke' => array('schulke', 'SKUL'),
+            'lalaurette' => array('lalaurette', 'LLOR'),
+            'chappert' => array('chappert', '9PR'),
+            'gruget' => array('gruget', 'JRUJ'),
+            'bladier' => array('bladier', 'BLDY'),
+            'mamers' => array('mamers', 'MMRS'),
+            'merigoux' => array('merigoux', 'MRKU'),
+            'durantez' => array('durantez', 'DURT'),
+            'vongrendeich' => array('vongrendeich', 'VORD'),
+            'bruot' => array('bruot', 'BRUO'),
+            'aurore' => array('aurore', 'OROR'),
+            'camarcat' => array('camarcat', 'KMK'),
+            'deroquetaillade' => array('deroquetaillade', 'DROK'),
+            'gaffet' => array('gaffet', 'KF'),
+            'devitry' => array('devitry', 'DVTR'),
+            'derochambeau' => array('derochambeau', 'DRO9'),
+            'coeurdacier' => array('coeurdacier', 'KRSY'),
+            'renaud' => array('renaud', 'RNO'),
+            'jabot' => array('jabot', 'JBO'),
+            'dilou' => array('dilou', 'DLU'),
+            'freton' => array('freton', 'FRTO'),
+            'schmitt' => array('schmitt', 'SKM'),
+            'ntheganja|adp' => array('ntheganja|adp', 'NTKJ'),
+            'lika' => array('lika', 'LK'),
+            'devarenne' => array('devarenne', 'DVRN'),
+            'viretlange' => array('viretlange', 'VRTL'),
+            'vivier' => array('vivier', 'VVY'),
+            'chopinet' => array('chopinet', '9OPN'),
+            'journeau' => array('journeau', 'JUNO'),
+            'lenormand' => array('lenormand', 'LNOR'),
+            'faunieres' => array('faunieres', 'FONY'),
+            'chenut' => array('chenut', '9NU'),
+            'mamode' => array('mamode', 'MMOD'),
+            'cazou' => array('cazou', 'KSU'),
+            'halim' => array('halim', 'AL1'),
+            'mayrargue' => array('mayrargue', 'MRK'),
+            'debarmon' => array('debarmon', 'DBMO'),
+            'sanquer' => array('sanquer', 'SK'),
+            'bayram' => array('bayram', 'BR'),
+            'bechade' => array('bechade', 'B9D'),
+            'gallou' => array('gallou', 'KLU'),
+            'genon' => array('genon', 'JNO'),
+            'hure' => array('hure', 'UR'),
+            'cahingt' => array('cahingt', 'K1J'),
+            'ouziel' => array('ouziel', 'USYL'),
+            'contadoscarpa' => array('contadoscarpa', 'KOTD'),
+            'naville' => array('naville', 'NVL'),
+            'pazzis' => array('pazzis', 'PSS'),
+            'careme' => array('careme', 'KRM'),
+            'nicolasmichel' => array('nicolasmichel', 'NKOL'),
+            'lautecaze' => array('lautecaze', 'LOTK'),
+            'paillard' => array('paillard', 'PL'),
+            'grapin' => array('grapin', 'JRP1'),
+            'khacphu' => array('khacphu', 'KFU'),
+            'lon' => array('lon', 'LO'),
+            'bingxiong' => array('bingxiong', 'B1JX'),
+            'chanhontong' => array('chanhontong', '9OTO'),
+            'berrada' => array('berrada', 'BRD'),
+            'salvy' => array('salvy', 'SLV'),
+            'lyon' => array('lyon', 'LYO'),
+            'ordinaire' => array('ordinaire', 'ODNR'),
+            'paolantoni' => array('paolantoni', 'POLT'),
+            'keizer' => array('keizer', 'KS'),
+            'elmahyaoui' => array('elmahyaoui', 'ELYU'),
+            'marina' => array('marina', 'MRN'),
+            'sternbach' => array('sternbach', 'TRN9'),
+            'vanessa' => array('vanessa', 'VNS'),
+            'axel' => array('axel', 'AXL'),
+            'pialot' => array('pialot', 'PYLO'),
+            'bezieux' => array('bezieux', 'BSYU'),
+            'bonjour' => array('bonjour', 'BOJU'),
+            'rieunier' => array('rieunier', 'RYUN'),
+            'fenayon' => array('fenayon', 'FNO'),
+            'anneflorie' => array('anneflorie', 'ANFL'),
+            'garreta' => array('garreta', 'KRT'),
+            'dognin' => array('dognin', 'DON1'),
+            'beylot' => array('beylot', 'BLO'),
+            'didier' => array('didier', 'DDY'),
+            'lecachalot' => array('lecachalot', 'LK9L'),
+            'ripouteau' => array('ripouteau', 'RPUT'),
+            'triebel' => array('triebel', 'TRYB'),
+            'capoulade' => array('capoulade', 'KPUL'),
+            'sanchidrian' => array('sanchidrian', 'S9DR'),
+            'hierro' => array('hierro', 'YRO'),
+            'legentil' => array('legentil', 'LJTL'),
+            'jacquesandre' => array('jacquesandre', 'JKSR'),
+            'fares' => array('fares', 'FRS'),
+            'bayrou' => array('bayrou', 'BRU'),
+            'sunanda' => array('sunanda', 'SUND'),
+            'castelnau' => array('castelnau', 'KTLN'),
+            'pouillard' => array('pouillard', 'PUL'),
+            'vessereau' => array('vessereau', 'VSRO'),
+            'massieux' => array('massieux', 'MSYU'),
+            'boomerang' => array('boomerang', 'BOMR'),
+            'cherruau' => array('cherruau', '9RUO'),
+            'dethieux' => array('dethieux', 'DTYU'),
+            'amsallem' => array('amsallem', 'ASL'),
+            'tournassoud' => array('tournassoud', 'TUNS'),
+            'violet' => array('violet', 'VYOL'),
+            'philippon' => array('philippon', 'FLPO'),
+            'bidaux' => array('bidaux', 'BDO'),
+            'etave' => array('etave', 'ETV'),
+            'fotiadi' => array('fotiadi', 'FOTY'),
+            'mathiot' => array('mathiot', 'MTYO'),
+            'malbernard' => array('malbernard', 'MLBR'),
+            'isabel' => array('isabel', 'YSBL'),
+            'mericdebellefon' => array('mericdebellefon', 'MRKD'),
+            'benslimane' => array('benslimane', 'BLMN'),
+            'mazerolle' => array('mazerolle', 'MSRO'),
+            'rainer' => array('rainer', 'RN'),
+            'rouzeau' => array('rouzeau', 'RUSO'),
+            'mouro' => array('mouro', 'MURO'),
+            'dunoyerdesegonzac' => array('dunoyerdesegonzac', 'DUNO'),
+            'maneville' => array('maneville', 'MNVL'),
+            'tewfik' => array('tewfik', 'TVFK'),
+            'jeanneteau' => array('jeanneteau', 'JNTO'),
+            'elannabi' => array('elannabi', 'ELNB'),
+            'satche' => array('satche', 'ST9'),
+            'touzery' => array('touzery', 'TUSR'),
+            'laurioz' => array('laurioz', 'LORY'),
+            'casoetto' => array('casoetto', 'KSTO'),
+            'playe' => array('playe', 'PL'),
+            'thieriet' => array('thieriet', 'TYRY'),
+            'kretz' => array('kretz', 'KRTS'),
+            'besse' => array('besse', 'BS'),
+            'salley' => array('salley', 'SL'),
+            'houpeurt' => array('houpeurt', 'UPR'),
+            'hartmann' => array('hartmann', 'ATM'),
+            'cartron' => array('cartron', 'KTRO'),
+            'juillet' => array('juillet', 'JUL'),
+            'szigeti' => array('szigeti', 'SSJT'),
+            'chantre' => array('chantre', '9TR'),
+            'blade' => array('blade', 'BLD'),
+            'delaronciere' => array('delaronciere', 'DLRO'),
+            'jaoude' => array('jaoude', 'JUD'),
+            'plessiscasso' => array('plessiscasso', 'PLSS'),
+            'rande' => array('rande', 'RD'),
+            'haithem' => array('haithem', 'ET'),
+            'dtw' => array('dtw', 'DTV'),
+            'brachou' => array('brachou', 'BR9U'),
+            'orel' => array('orel', 'ORL'),
+            'beby' => array('beby', 'BB'),
+            'ballesta' => array('ballesta', 'BLT'),
+            'pelegrin' => array('pelegrin', 'PLJR'),
+            'charvillon' => array('charvillon', '9VLO'),
+            'parmentelat' => array('parmentelat', 'PRTL'),
+            'djakou' => array('djakou', 'DKU'),
+            'hahuy' => array('hahuy', 'AU'),
+            'larroque' => array('larroque', 'LROK'),
+            'mennerat' => array('mennerat', 'MNR'),
+            'plo' => array('plo', 'PLO'),
+            'colleau' => array('colleau', 'KOLO'),
+            'badellon' => array('badellon', 'BDLO'),
+            'goger' => array('goger', 'KOJ'),
+            'cruchant' => array('cruchant', 'KRU9'),
+            'mouly' => array('mouly', 'MUL'),
+            'stouff' => array('stouff', 'TUF'),
+            'fayette' => array('fayette', 'FT'),
+            'paturle' => array('paturle', 'PTUL'),
+            'maquere' => array('maquere', 'MKR'),
+            'seitz' => array('seitz', 'STS'),
+            'raoust' => array('raoust', 'RU'),
+            'aussure' => array('aussure', 'OSUR'),
+            'ytournel' => array('ytournel', 'YTUN'),
+            'arrive' => array('arrive', 'ARV'),
+            'thiennot' => array('thiennot', 'TYNO'),
+            'liepvre' => array('liepvre', 'LYPV'),
+            'kavenoky' => array('kavenoky', 'KVNO'),
+            'noyere' => array('noyere', 'NOYR'),
+            'lalement' => array('lalement', 'LLM'),
+            'maigne' => array('maigne', 'MJN'),
+            'brouder' => array('brouder', 'BRUD'),
+            'grasmuck' => array('grasmuck', 'JRSU'),
+            'roll' => array('roll', 'ROL'),
+            'lasoudiere' => array('lasoudiere', 'LSUD'),
+            'lorino' => array('lorino', 'LORN'),
+            'chassagnette' => array('chassagnette', '9SNT'),
+            'lamothe' => array('lamothe', 'LMOT'),
+            'poux' => array('poux', 'PU'),
+            'claudejean' => array('claudejean', 'KLOD'),
+            'lupo' => array('lupo', 'LUPO'),
+            'spiteri' => array('spiteri', 'SPTR'),
+            'bernu' => array('bernu', 'BRNU'),
+            'do' => array('do', 'DO'),
+            'patier' => array('patier', 'PTY'),
+            'lanson' => array('lanson', 'LSO'),
+            'labelle' => array('labelle', 'LBL'),
+            'chabenne' => array('chabenne', '9BN'),
+            'dubasty' => array('dubasty', 'DUBT'),
+            'decugis' => array('decugis', 'DKUJ'),
+            'derode' => array('derode', 'DROD'),
+            'benatig' => array('benatig', 'BNTJ'),
+            'cayatte' => array('cayatte', 'KT'),
+            'bourzeix' => array('bourzeix', 'BUS'),
+            'linhares' => array('linhares', 'L1RS'),
+            'dubus' => array('dubus', 'DUBU'),
+            'bernaert' => array('bernaert', 'BRNR'),
+            'jeanlouis' => array('jeanlouis', 'JLUS'),
+            'roscoat' => array('roscoat', 'ROKO'),
+            'thivent' => array('thivent', 'TV'),
+            'jouty' => array('jouty', 'JUT'),
+            'blouet' => array('blouet', 'BLU'),
+            'wenzinger' => array('wenzinger', 'VS1J'),
+            'chybiryakov' => array('chybiryakov', '9BRY'),
+            'lachauffe' => array('lachauffe', 'L9OF'),
+            'rached' => array('rached', 'R9'),
+            'deseze' => array('deseze', 'DSS'),
+            'cavailloles' => array('cavailloles', 'KVLO'),
+            'chajia' => array('chajia', '9JY'),
+            'szilard' => array('szilard', 'SSL'),
+            'nhung' => array('nhung', 'N1J'),
+            'hemissi' => array('hemissi', 'EMS'),
+        );
+    }
+
+    /**
+     * @dataProvider tokenProvider
+     */
+    public function testSoundex($token, $soundex)
+    {
+        $this->assertSame($soundex, rtrim(soundex_fr($token), ' '));
+    }
+}
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+?>