Files
TinyTorch/docs/development/shared-testing-pattern.md
Vijay Janapa Reddi 5264b6aa68 Move testing utilities to tito/tools for better software architecture
- Move testing utilities from tinytorch/utils/testing.py to tito/tools/testing.py
- Update all module imports to use tito.tools.testing
- Remove testing utilities from core TinyTorch package
- Testing utilities are development tools, not part of the ML library
- Maintains clean separation between library code and development toolchain
- All tests continue to work correctly with improved architecture
2025-07-13 21:05:11 -04:00

4.2 KiB

TinyTorch Shared Testing Pattern

🎯 Problem Solved

Previously, each module had inconsistent test summaries and duplicated formatting code. Now all modules use shared testing utilities for:

Perfect Consistency - All modules have identical output format
Zero Code Duplication - Testing utilities are shared across all modules
Easy Maintenance - Changes only need to be made in one place
Scalable - Works for any number of modules and tests

📋 Usage Pattern

1. Import the Shared Utilities

from tinytorch.utils.testing import create_test_runner

2. Write Your Test Functions

def test_feature_a():
    """Test feature A functionality."""
    # Your test code here
    assert something_works(), "Feature A should work"
    print("✅ Feature A tests passed!")

def test_feature_b():
    """Test feature B functionality."""
    # Your test code here
    assert something_else_works(), "Feature B should work"
    print("✅ Feature B tests passed!")

3. Register and Run Tests

if __name__ == "__main__":
    # Create test runner for this module
    test_runner = create_test_runner("YourModule")
    
    # Register all tests
    test_runner.register_test("Feature A", test_feature_a)
    test_runner.register_test("Feature B", test_feature_b)
    
    # Run all tests with consistent output
    success = test_runner.run_all_tests()

🎭 Standard Output Format

Every module produces identical output:

🔬 Running YourModule Module Tests...
==================================================
🧪 Testing Feature A... ✅ PASSED
🧪 Testing Feature B... ✅ PASSED

============================================================
🎯 YOURMODULE MODULE TESTING COMPLETE
============================================================
🎉 CONGRATULATIONS! All tests passed!

✅ YourModule Module Status: 2/2 tests passed (100%)

📊 Detailed Results:
   Feature A: ✅ PASSED
   Feature B: ✅ PASSED

📈 Progress: YourModule Module ✓ COMPLETE

🚀 Ready for the next module!

🏗️ Architecture

Shared Utilities Location

  • Main utilities: tinytorch/utils/testing.py
  • Import from: from tinytorch.utils.testing import create_test_runner

ModuleTestRunner Class

The core class that provides:

  • register_test(name, function) - Register test functions
  • run_all_tests() - Execute all tests with consistent output
  • Error handling and detailed reporting

📈 Migration Guide

To migrate an existing module:

Before (Inconsistent)

# Old way - inconsistent format
def test_something():
    # test code
    pass

# Manual summary - different across modules
print("Some tests passed!")

After (Consistent)

# New way - consistent format
from tinytorch.utils.testing import create_test_runner

def test_something():
    # test code
    print("✅ Something tests passed!")

if __name__ == "__main__":
    test_runner = create_test_runner("ModuleName")
    test_runner.register_test("Something", test_something)
    success = test_runner.run_all_tests()

Benefits Achieved

  1. Consistency: All modules have identical testing output
  2. No Duplication: Testing utilities are shared across modules
  3. Easy Maintenance: Changes to format only need to be made in one place
  4. Scalable: Works for any number of tests and modules
  5. Professional: Clean, standardized output suitable for educational use
  6. Error Handling: Detailed error reporting for failed tests

🚀 Implementation Status

  • Shared utilities created: tinytorch/utils/testing.py
  • Documentation complete: Usage patterns and examples
  • Testing verified: Confirmed working with example modules
  • Migration pending: Apply pattern to all existing modules

🔧 Next Steps

  1. Apply to all modules: Migrate existing modules to use shared pattern
  2. Test thoroughly: Ensure all modules work with new pattern
  3. Update documentation: Module-specific docs reference shared pattern
  4. Commit changes: Save the improved testing infrastructure

This shared testing pattern eliminates code duplication while ensuring perfect consistency across all TinyTorch modules!