| |
| """ |
| Quick test script to verify the demo setup |
| """ |
|
|
| import sys |
|
|
| def test_imports(): |
| """Test that all required packages can be imported.""" |
| print("π§ͺ Testing package imports...") |
| |
| packages = [ |
| ('numpy', 'NumPy'), |
| ('cv2', 'OpenCV'), |
| ('streamlit', 'Streamlit'), |
| ('PIL', 'Pillow'), |
| ('huggingface_hub', 'HuggingFace Hub'), |
| ] |
| |
| failed = [] |
| for module, name in packages: |
| try: |
| __import__(module) |
| print(f" β
{name}") |
| except ImportError as e: |
| print(f" β {name}: {e}") |
| failed.append(name) |
| |
| return len(failed) == 0, failed |
|
|
|
|
| def test_app_structure(): |
| """Test that app.py has the expected structure.""" |
| print("\nπ Testing app structure...") |
| |
| try: |
| import app |
| |
| |
| functions = [ |
| 'load_sample_image', |
| 'downsample_image', |
| 'quantize_image', |
| 'apply_sampling_and_quantization', |
| 'calculate_file_size', |
| 'compress_image_jpeg', |
| 'compress_image_png', |
| 'main_loop', |
| ] |
| |
| failed = [] |
| for func in functions: |
| if hasattr(app, func): |
| print(f" β
Function '{func}' found") |
| else: |
| print(f" β Function '{func}' missing") |
| failed.append(func) |
| |
| return len(failed) == 0, failed |
| |
| except Exception as e: |
| print(f" β Error loading app: {e}") |
| return False, [str(e)] |
|
|
|
|
| def test_image_generation(): |
| """Test that we can generate a sample image.""" |
| print("\nπΌοΈ Testing image generation...") |
| |
| try: |
| import app |
| import numpy as np |
| |
| img = app.generate_sample_image(size=256) |
| |
| |
| assert img.shape == (256, 256, 3), f"Wrong shape: {img.shape}" |
| assert img.dtype == np.uint8, f"Wrong dtype: {img.dtype}" |
| assert img.min() >= 0 and img.max() <= 255, "Invalid pixel values" |
| |
| print(f" β
Generated {img.shape[1]}Γ{img.shape[0]} image") |
| return True, [] |
| |
| except Exception as e: |
| print(f" β Error: {e}") |
| return False, [str(e)] |
|
|
|
|
| def test_image_processing(): |
| """Test basic image processing functions.""" |
| print("\nβοΈ Testing image processing...") |
| |
| try: |
| import app |
| import numpy as np |
| |
| |
| test_img = np.random.randint(0, 256, (128, 128, 3), dtype=np.uint8) |
| |
| |
| downsampled = app.downsample_image(test_img, sampling_rate=2) |
| print(f" β
Downsampling works") |
| |
| |
| quantized = app.quantize_image(test_img, bits_per_pixel=4) |
| print(f" β
Quantization works") |
| |
| |
| processed = app.apply_sampling_and_quantization(test_img, 2, 4) |
| print(f" β
Combined processing works") |
| |
| |
| size = app.calculate_file_size(test_img.shape, 2, 4) |
| assert size > 0, "File size should be positive" |
| print(f" β
File size calculation works ({size} bytes)") |
| |
| return True, [] |
| |
| except Exception as e: |
| print(f" β Error: {e}") |
| import traceback |
| traceback.print_exc() |
| return False, [str(e)] |
|
|
|
|
| def main(): |
| """Run all tests.""" |
| print("=" * 60) |
| print("π¨ Image Sampling & Quantization Demo - Test Suite") |
| print("=" * 60) |
| |
| all_passed = True |
| |
| |
| passed, failed = test_imports() |
| if not passed: |
| print(f"\nβ Import test failed. Missing packages: {', '.join(failed)}") |
| print("\nπ‘ Run: pip install -r requirements.txt") |
| all_passed = False |
| |
| |
| if passed: |
| passed, failed = test_app_structure() |
| if not passed: |
| print(f"\nβ App structure test failed.") |
| all_passed = False |
| |
| |
| if passed: |
| passed, failed = test_image_generation() |
| if not passed: |
| print(f"\nβ Image generation test failed.") |
| all_passed = False |
| |
| |
| if passed: |
| passed, failed = test_image_processing() |
| if not passed: |
| print(f"\nβ Image processing test failed.") |
| all_passed = False |
| |
| |
| print("\n" + "=" * 60) |
| if all_passed: |
| print("β
All tests passed! Ready to run the demo.") |
| print("\nπ Start with: ./run_simple.sh") |
| print(" Or: make run") |
| print(" Or: streamlit run app.py") |
| return 0 |
| else: |
| print("β Some tests failed. Please fix the issues above.") |
| return 1 |
|
|
|
|
| if __name__ == "__main__": |
| sys.exit(main()) |
|
|