RegressionTests__KoelnerPhoneticCodeStringComparatorTest.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 18:53:03 +0200
changeset 2327 bf482d49aeaf
parent 2169 a1a0194d9890
permissions -rw-r--r--
#QUALITY by exept class: RegressionTests::StringTests added: #test82c_expanding

"{ Package: 'stx:goodies/regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#KoelnerPhoneticCodeStringComparatorTest
	instanceVariableNames:'sc'
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-Collections-Utilities'
!


!KoelnerPhoneticCodeStringComparatorTest methodsFor:'initialize / release'!

setUp
    sc := PhoneticStringUtilities::KoelnerPhoneticCodeStringComparator new
! !

!KoelnerPhoneticCodeStringComparatorTest methodsFor:'tests'!

test01_SomeCombinations
    "tests if all character combinations (up to 4 chars) are handled"

    |code s|

    "/ self skip:'this test does not really test anything (except if all 4-char string combinations can be soundexed)'.

    $A to:$Z do:[:c1 |
        s := String with:c1.
        code := (sc phoneticStringsFor:s) first.
        "/ self assert:( code notEmpty ).

        $A to:$Z do:[:c2 |
            s := String with:c1 with:c2.
            code := (sc phoneticStringsFor:s) first.
            "/ self assert:( code notEmpty ).

            $A to:$Z do:[:c3 |
                s := String with:c1 with:c2 with:c3.
                code := (sc phoneticStringsFor:s) first.
                "/ self assert:( code notEmpty ).

                $A to:$Z do:[:c4 |
                    s := String with:c1 with:c2 with:c3 with:c4.
                    code := (sc phoneticStringsFor:s) first.
                    "/ self assert:( code notEmpty ).
                ].
            ].
        ].
    ].

    "Created: / 28-07-2017 / 09:21:39 / cg"
    "Modified: / 29-07-2017 / 14:17:56 / cg"
!

test02_WellKnownResults
    |code koeln|

    koeln := [:w | (sc phoneticStringsFor:w) first].

    code := (sc phoneticStringsFor:'Miller') first.
    self assert:( code = 'Miller' asKoelnerPhoneticCode).

    #( 'Acton' 'Ashdown' 'Ashton' 'Astin' 'Aston' 'Austen' 'Austin' 'Austine' 'Axten')
    do:[:w |
        code := koeln value:(w).
        self assert:( code = (w asKoelnerPhoneticCode)).
    ].

    #( 'Reader' 'Reeder' 'Rider' 'Ritter' 'Rothera' 'Rothra' 'Ruder' 'Rutter' 'Ryder')
    do:[:w |
        code := koeln value:(w).
        self assert:( code = (w asKoelnerPhoneticCode)).
    ].

    #( 'Wace' 'Waugh' 'Wookey')
    do:[:w |
        code := koeln value:(w).
        self assert:( code = (w asKoelnerPhoneticCode)).
    ].

    code := koeln value:('Abbot').
    self assert:( code = 'Abbot' asKoelnerPhoneticCode).

    code := koeln value:('Abbots').
    self assert:( code = 'Abbots' asKoelnerPhoneticCode).

    code := koeln value:('Ashcroft').
    self assert:( code = 'Ashcroft' asKoelnerPhoneticCode).

    code := koeln value:('Lloyd').
    self assert:( code = 'Lloyd' asKoelnerPhoneticCode).

    code := koeln value:('Pfister').
    self assert:( code = 'Pfister' asKoelnerPhoneticCode).

    self assert: ( koeln value:( 'A' )) = ('A' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'B' )) = ('B' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'C' )) = ('C' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'D' )) = ('D' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'E' )) = ('E' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'F' )) = ('F' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'G' )) = ('G' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'H' )) = ('H' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'I' )) = ('I' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'J' )) = ('J' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'K' )) = ('K' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'L' )) = ('L' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'M' )) = ('M' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'N' )) = ('N' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'O' )) = ('O' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'P' )) = ('P' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'Q' )) = ('Q' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'R' )) = ('R' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'S' )) = ('S' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'T' )) = ('T' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'U' )) = ('U' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'V' )) = ('V' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'W' )) = ('W' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'X' )) = ('X' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'Y' )) = ('Y' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'Z' )) = ('Z' asKoelnerPhoneticCode) .

    self assert: ( koeln value:( 'AEHIOW' )) = ('AEHIOW' asKoelnerPhoneticCode) .
    self assert: ( koeln value:( 'BPFV' )) = ('BPFV' asKoelnerPhoneticCode).
    self assert: ( koeln value:( 'CGJKQSXZ' )) = ('CGJKQSXZ'  asKoelnerPhoneticCode).
    self assert: ( koeln value:( 'DT' )) = ('DT'  asKoelnerPhoneticCode).
    self assert: ( koeln value:( 'L' )) = ('L'  asKoelnerPhoneticCode).
    self assert: ( koeln value:( 'MN' )) = ('MN'  asKoelnerPhoneticCode).
    self assert: ( koeln value:( 'R' )) = ('R'  asKoelnerPhoneticCode).

    "Created: / 28-07-2017 / 09:21:47 / cg"
!

test03_WellKnownResults
    |code|

    code := PhoneticStringUtilities koelnerPhoneticCodeOf:'Breschnew'.
    self assert:(code = '17863').

    "/ these all sound similar - so they should get the same code
    #(
        'Breschnew'
        'Breschneff'
        'Braeschneff'
        'Braessneff' 
        'Pressneff' 
        'Presznäph'
        'Präschnäf'
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '17863').
    ].
        
    "/ these all sound similar - so they should get the same code
    #(
        'müller'
        'mueller'
        'Mueller'
        'Muehler'
        'Mueler'
        'Müler'
        'Mühler'
        'Mühlher'
        'Mühlherr'
        'Mülherr'
        'Müllherr'
        'Mülleer'
        'Mülar'
        'Muelherr'
        'Muelar'
        'möller'
        'miller'
        'muller' 
        'muler' 
        'myler' 
        'mylar' 
        'myller' 
        'myller' 

        'nyller' 
        'nüller' 
        'niller' 
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '657').
    ].

    "/ these all sound similar - so they should get the same code
    #(
        'schmidt'
        'schmid'
        'schmit'
        'schmidtt' 
        'schmidd' 
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '862').
    ].

    "/ these all sound similar - so they should get the same code
    #(
        'schneider'
        'sneider'
        'shneider'
        'schneiter'
        'schneitar'
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '8627').
    ].

    "/ these all sound similar - so they should get the same code
    #(
        'weber'
        'webber'
        'weeber'
        'wehber'
        'weper'
        'wepper'
        'weppar'
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '317').
    ].

    "/ these all sound similar - so they should get the same code
    #(
        'meyer'
        'mayer'
        'meier'
        'maier'
        'maiar'
        'meiar'
        'meyar'
        'meyer'
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '67').
    ].

    #(
        'Czerny'
        'Tscherny'
        'Czernie'
        'Tschernie'
        'Schernie'
        'Scherny'
        'Scherno'
        'Czerne'
        'Zerny'
        'Zerne'
        'Zerni'
        'cerni'
        'tscherni'
        'tserni'
        'serni'
        'Tzernie'
        'Tzernie'
    ) do:[:each |
        self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:each) = '876').
    ].

    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'fischer') = '387').

    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'wagner') = '3467').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'vagner') = '3467').

    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schulz') = '858').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schultz') = '858').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schults') = '858').

    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'becker') = '147').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'hoffmann') = '036').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'hofmann') = '036').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'hovmann') = '036').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'hovman') = '036').

    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schäfer') = '837').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schäffer') = '837').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schaeffer') = '837').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'schaefer') = '837').

    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'Müller-Lüdenscheidt') = '65752682').
    self assert:((PhoneticStringUtilities koelnerPhoneticCodeOf:'Mueller-Litenscheidt') = '65752682').

    "Created: / 28-07-2017 / 09:36:16 / cg"
! !

!KoelnerPhoneticCodeStringComparatorTest class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !