Soundex algorithm for phonetic indexing (SNDX)

### Program Information

Name: Soundex algorithm for phonetic indexing (SNDX)
Domain: Algorithm
Functionality: An algorithm for computing the phonetic soundex code of a given word by collecting its consonants into classes based on the sounding similarity between them
Input: Assume that $X=\{x_1,x_2,\cdots\}$ is the given word.
Output: $O(X)$ will be the soundex code of X

#### Reference

 Generating Source Inputs for Metamorphic Testing Using Dynamic Symbolic Execution https://doi.org/10.1145/2896971.2896980

### MR Information

#### MR1------Inclusion

Description:
Property: $z\in \{a,e,i,o\} \Rightarrow O(x_1x_2\cdots) = O(x_1zx_2z\cdots z)$
Source input: $X=(x_1x_2\cdots)$
Source output: $O(x_1x_2\cdots)$
Follow-up input: $X'=(x_1zx_2z\cdots z)$
Follow-up output: $O(x_1zx_2z\cdots z)$
Input relation: insert $z$ to X where $z\in \{a,e,i,o\}$.
Output relation: $O(x_1x_2\cdots) = O(x_1zx_2z\cdots z)$
Pattern:

#### MR2------Duplication

Description:
Property: $O(x_1x_2\cdots x_n) = O(x_1x_2\cdots x_nx_n)$
Source input: $X=(x_1x_2\cdots x_n)$
Source output: $O(x_1x_2\cdots x_n)$
Follow-up input: $X'=(x_1x_2\cdots x_nx_n)$
Follow-up output: $O(x_1x_2\cdots x_nx_n)$
Input relation: append $x_n$ to X.
Output relation: $O(x_1x_2\cdots x_n) = O(x_1x_2\cdots x_nx_n)$
Pattern:

#### MR3------Reversal

Description:
Property: $|X|>4 \wedge X\neq reverse(X) \Rightarrow O(X) \neq O(reverse(X))$
Source input:  $X$
Source output: $O(X)$
Follow-up input: $reverse(X)$
Follow-up output:  $O(reverse(X))$
Input relation: $X \Rightarrow reverse(X)$ where $|X|>4 \wedge X\neq reverse(X)$
Output relation: $O(X) \neq O(reverse(X))$
Pattern:

#### MR4------Deletion

Description:
Property: $|X|>4 \wedge X[n-1] \in \{a,e,i,o\} \Rightarrow O(X)=O(X-X[n-1])$
Source input: $X$
Source output: $O(X)$
Follow-up input:  $X[n-1]$
Follow-up output:  $O(X[n-1])$
Input relation: $X \Rightarrow X[n-1]$ where $|X|>4 \wedge X[n-1] \in \{a,e,i,o\}$
Output relation: $O(X)=O(X-X[n-1])$
Pattern:

#### MR5------Character case conversion

Description:
Property: $O(X)=O(toLower(X))$
Source input: $X$
Source output: $O(X)$
Follow-up input: $toLower(X)$
Follow-up output: $O(toLower(X))$
Input relation: $X \Rightarrow toLower(X)$
Output relation: $O(X)=O(toLower(X))$
Pattern:
Insert title here