#!/usr/bin/env python3
"""Testfaelle fuer das Embeddingmodul, soweit sie ohne Modell auskommen.
python3 -m unittest test_embeddings -v
Was das Modell selbst tut, laesst sich hier nicht pruefen - dafuer ist
`embeddings.py --nachweis` da, das im Container gegen die echten Gewichte
laeuft. Geprueft wird hier alles davor und danach: welcher Text hineingeht und
welche Bytes herauskommen.
"""
import struct
import unittest
import embeddings as e
import normalisierung as n
class Bereinigung(unittest.TestCase):
"""bereinige() raeumt auf, ohne den Text zu zerlegen."""
def test_grossschreibung_bleibt(self):
self.assertEqual(n.bereinige("Habeck fordert Wende"), "Habeck fordert Wende")
def test_satzzeichen_bleiben(self):
self.assertIn("?", n.bereinige("Kommt die Wende?"))
def test_tags_und_entities_weg(self):
self.assertEqual(n.bereinige("Bund & Länder"), "Bund & Länder")
def test_anfuehrungszeichen_vereinheitlicht(self):
self.assertEqual(n.bereinige("„Wende“"), '"Wende"')
def test_pluskasten_bleibt_stehen(self):
# Anders als normalisiere(): fuer einen Encoder ist der Ticker-Rahmen
# Text, kein Beiwerk.
self.assertIn("Liveticker", n.bereinige("++ Liveticker zur Wahl ++"))
def test_leerraum_zusammengezogen(self):
self.assertEqual(n.bereinige("a \n b"), "a b")
def test_leere_teile_uebersprungen(self):
self.assertEqual(n.bereinige(None, "Titel", ""), "Titel")
class Eingabetext(unittest.TestCase):
def test_praefix_vorne(self):
self.assertTrue(e.text("Titel", "Teaser").startswith(e.PRAEFIX))
def test_titel_und_teaser_verbunden(self):
t = e.text("Wahl in Sachsen-Anhalt", "Die AfD liegt vorn.")
self.assertIn("Wahl in Sachsen-Anhalt Die AfD liegt vorn.", t)
def test_fehlender_teaser(self):
self.assertEqual(e.text("Nur ein Titel", None), e.PRAEFIX + "Nur ein Titel")
class Vektorliteral(unittest.TestCase):
def test_form(self):
self.assertEqual(e.als_vector([1.0, -0.5]), "[1.0,-0.5]")
def test_rueckweg_ist_verlustfrei(self):
werte = [0.1234567, -0.9876543, 1e-8]
zurueck = [float(x) for x in e.als_vector(werte).strip("[]").split(",")]
self.assertEqual(werte, zurueck)
class Vektorhash(unittest.TestCase):
def test_gleiche_werte_gleicher_hash(self):
self.assertEqual(e.vektor_hash([0.5, 0.25]), e.vektor_hash([0.5, 0.25]))
def test_kleinste_aenderung_anderer_hash(self):
eins = struct.unpack("