From b6161eb20eb62817eab8756ea4b39c4e1c3d18ec Mon Sep 17 00:00:00 2001 From: "Andreas Koepf (aider)" Date: Thu, 23 Jan 2025 20:26:12 +0100 Subject: [PATCH] test: Add comprehensive unit tests for WordReversalDataset --- tests/test_word_reversal.py | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 tests/test_word_reversal.py diff --git a/tests/test_word_reversal.py b/tests/test_word_reversal.py new file mode 100644 index 00000000..69b27f08 --- /dev/null +++ b/tests/test_word_reversal.py @@ -0,0 +1,84 @@ +"""Tests for word reversal task generation""" +import pytest + +from reasoning_gym.algorithmic.word_reversal import ( + WordReversalConfig, + WordReversalDataset, +) + + +def test_word_reversal_config_validation(): + """Test that invalid configs raise appropriate errors""" + with pytest.raises(AssertionError): + config = WordReversalConfig(min_words=0) + config.validate() + + with pytest.raises(AssertionError): + config = WordReversalConfig(min_words=10, max_words=5) + config.validate() + + +def test_word_reversal_dataset_deterministic(): + """Test that dataset generates same items with same seed""" + config = WordReversalConfig(seed=42, size=10) + dataset1 = WordReversalDataset(config) + dataset2 = WordReversalDataset(config) + + for i in range(len(dataset1)): + assert dataset1[i] == dataset2[i] + + +def test_word_reversal_dataset_items(): + """Test basic properties of generated items""" + config = WordReversalConfig( + min_words=3, + max_words=6, + size=10, + seed=42 + ) + dataset = WordReversalDataset(config) + + for i in range(len(dataset)): + item = dataset[i] + # Check item structure + assert isinstance(item, dict) + assert "question" in item + assert "answer" in item + assert "metadata" in item + + # Check metadata + assert "num_words" in item["metadata"] + assert "words" in item["metadata"] + + # Verify word count constraints + words = item["metadata"]["words"] + assert len(words) >= config.min_words + assert len(words) <= config.max_words + + # Verify reversal is correct + question_words = [w.strip() for w in item["question"].split(":")[1].strip().split(",")] + answer_words = item["answer"].split(", ") + assert answer_words == list(reversed(question_words)) + + +def test_word_reversal_dataset_iteration(): + """Test that iteration respects dataset size""" + config = WordReversalConfig(size=5, seed=42) + dataset = WordReversalDataset(config) + + items = list(dataset) + assert len(items) == config.size + + # Test multiple iterations yield same items + assert items == list(dataset) + + +def test_word_reversal_text_preprocessing(): + """Test that text preprocessing handles edge cases""" + config = WordReversalConfig(size=1, seed=42) + dataset = WordReversalDataset(config) + + # Verify words were extracted from text + assert len(dataset.words) > 0 + # Verify words contain only alphanumeric characters + assert all(word.isalnum() for word in dataset.words)