Initial import (translated from rderekovecs)
Change-Id: Ib4a4747f6474dfe67d79288be3f8bdaf66a513b8
diff --git a/tests/test_derekovecs.py b/tests/test_derekovecs.py
new file mode 100644
index 0000000..d634215
--- /dev/null
+++ b/tests/test_derekovecs.py
@@ -0,0 +1,149 @@
+"""
+Tests for the pyderekovecs package.
+"""
+import unittest
+import pandas as pd
+from unittest import mock
+
+from pyderekovecs import (
+ syntagmatic_neighbours,
+ countbased_collocates,
+ word_frequency,
+ corpus_size,
+ paradigmatic_neighbours,
+ word_embedding,
+ frequency_rank,
+ cosine_similarity,
+ collocation_scores,
+ derekovecs_api_call
+)
+from pyderekovecs.utils import is_word
+
+
+class MockResponse:
+ """Mock response class for testing."""
+
+ def __init__(self, json_data, status_code=200):
+ self.json_data = json_data
+ self.status_code = status_code
+
+ def json(self):
+ return self.json_data
+
+ def raise_for_status(self):
+ if self.status_code != 200:
+ raise Exception(f"HTTP Error: {self.status_code}")
+
+
+class TestDerekovecs(unittest.TestCase):
+ """Test cases for the pyderekovecs package."""
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_paradigmatic_neighbours(self, mock_get):
+ """Test that paradigmatic_neighbours works."""
+ mock_response = {
+ "list": [
+ [{"word": "Test", "similarity": 1.0}, {"word": "Experiment", "similarity": 0.8}]
+ ]
+ }
+ mock_get.return_value = MockResponse(mock_response)
+
+ result = paradigmatic_neighbours("Test")
+ self.assertEqual(result.iloc[0]['word'], "Test")
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_syntagmatic_neighbours(self, mock_get):
+ """Test that syntagmatic_neighbours works."""
+ mock_response = {
+ "collocators": [
+ {"word": "durchführen", "rank": 1, "average": 0.8}
+ ]
+ }
+ mock_get.return_value = MockResponse(mock_response)
+
+ result = syntagmatic_neighbours("Test")
+ self.assertTrue(is_word(result.iloc[0]['word']))
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_countbased_collocates(self, mock_get):
+ """Test that countbased_collocates works."""
+ mock_response = {
+ "collocates": [
+ {"word": "durchführen", "f": 100, "pmi": 0.8}
+ ]
+ }
+ mock_get.return_value = MockResponse(mock_response)
+
+ result = countbased_collocates("Test")
+ self.assertTrue(is_word(result.iloc[0]['word']))
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_collocation_scores(self, mock_get):
+ """Test that collocation_scores works."""
+ mock_response = {
+ "collocates": [
+ {"word": "putzen", "f2": 500, "pmi": 0.8}
+ ]
+ }
+ mock_get.return_value = MockResponse(mock_response)
+
+ result = collocation_scores("Zähne", "putzen")
+ self.assertTrue(result.iloc[0]['f2'] > 0)
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_cosine_similarity(self, mock_get):
+ """Test that cosine_similarity works."""
+ # Test for same word
+ mock_get.return_value = MockResponse(1.0)
+
+ result = cosine_similarity("Test", "Test")
+ self.assertEqual(result, 1.0)
+
+ # Test for different words
+ mock_get.return_value = MockResponse(0.7)
+
+ result = cosine_similarity("Test", "testen")
+ self.assertTrue(0 <= result <= 1.0)
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_word_embedding(self, mock_get):
+ """Test that word_embedding works."""
+ # Create a mock vector of length 200
+ mock_vector = [0.1] * 200
+ mock_response = {
+ "list": [
+ {"vector": [mock_vector]}
+ ]
+ }
+ mock_get.return_value = MockResponse(mock_response)
+
+ result = word_embedding("Test")
+ self.assertEqual(len(result), 200)
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_frequency_rank(self, mock_get):
+ """Test that frequency_rank works."""
+ mock_get.return_value = MockResponse({"frequencyRank": 500})
+
+ result = frequency_rank("Test")
+ self.assertTrue(isinstance(result, int) and result > 0)
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_word_frequency(self, mock_get):
+ """Test that word_frequency works."""
+ mock_get.return_value = MockResponse({"f1": 1000})
+
+ result = word_frequency("Test")
+ self.assertTrue(isinstance(result, int) and result > 0)
+
+ @mock.patch('pyderekovecs.derekovecs.requests.get')
+ def test_corpus_size(self, mock_get):
+ """Test that corpus_size works."""
+ mock_get.return_value = MockResponse({"N": 1000000})
+
+ result = corpus_size()
+ self.assertTrue(isinstance(result, int) and result > 1000)
+
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file