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