87 lines
2.4 KiB
Python
87 lines
2.4 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
"""Tests for phoneme features"""
|
|||
|
import dataclasses
|
|||
|
import unittest
|
|||
|
|
|||
|
from gruut_ipa import (
|
|||
|
CONSONANTS,
|
|||
|
SCHWAS,
|
|||
|
VOWELS,
|
|||
|
Break,
|
|||
|
BreakType,
|
|||
|
PhonemeLength,
|
|||
|
Stress,
|
|||
|
from_vector,
|
|||
|
string_to_symbol,
|
|||
|
to_vector,
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
class FeaturesTestCase(unittest.TestCase):
|
|||
|
"""Test cases for phoneme features"""
|
|||
|
|
|||
|
def test_vowels(self):
|
|||
|
"""Test to/from feature vector for vowels"""
|
|||
|
for vowel in VOWELS.values():
|
|||
|
if vowel.alias_of:
|
|||
|
continue
|
|||
|
|
|||
|
feat_vec = to_vector(vowel)
|
|||
|
self.assertEqual(vowel, from_vector(feat_vec))
|
|||
|
|
|||
|
# Test with stress
|
|||
|
for stress in Stress:
|
|||
|
vowel_stressed = dataclasses.replace(vowel, stress=stress)
|
|||
|
feat_vec = to_vector(vowel_stressed)
|
|||
|
self.assertEqual(vowel_stressed, from_vector(feat_vec))
|
|||
|
|
|||
|
def test_consonants(self):
|
|||
|
"""Test to/from feature vector for consonants"""
|
|||
|
for consonant in CONSONANTS.values():
|
|||
|
if consonant.alias_of:
|
|||
|
continue
|
|||
|
|
|||
|
feat_vec = to_vector(consonant)
|
|||
|
self.assertEqual(consonant, from_vector(feat_vec))
|
|||
|
|
|||
|
def test_schwas(self):
|
|||
|
"""Test to/from feature vector for schwas"""
|
|||
|
for schwa in SCHWAS.values():
|
|||
|
if schwa.alias_of:
|
|||
|
continue
|
|||
|
|
|||
|
feat_vec = to_vector(schwa)
|
|||
|
self.assertEqual(schwa, from_vector(feat_vec))
|
|||
|
|
|||
|
def test_breaks(self):
|
|||
|
"""Test to/from feature vector for breaks"""
|
|||
|
for break_type in BreakType:
|
|||
|
ipa_break = Break(break_type)
|
|||
|
feat_vec = to_vector(ipa_break)
|
|||
|
self.assertEqual(ipa_break, from_vector(feat_vec))
|
|||
|
|
|||
|
def test_string_to_symbol(self):
|
|||
|
"""Test symbol parsing"""
|
|||
|
self.assertEqual(
|
|||
|
string_to_symbol("ˈãː"),
|
|||
|
dataclasses.replace(
|
|||
|
VOWELS["ã"], stress=Stress.PRIMARY, length=PhonemeLength.LONG
|
|||
|
),
|
|||
|
)
|
|||
|
|
|||
|
self.assertEqual(
|
|||
|
string_to_symbol("ɫː"),
|
|||
|
dataclasses.replace(CONSONANTS["ɫ"], length=PhonemeLength.LONG),
|
|||
|
)
|
|||
|
|
|||
|
self.assertEqual(
|
|||
|
string_to_symbol("ɚː"),
|
|||
|
dataclasses.replace(SCHWAS["ɚ"], length=PhonemeLength.LONG),
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
# -----------------------------------------------------------------------------
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
unittest.main()
|