File size: 4,693 Bytes
26f8b9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
"""
Test mesh generation locally before deployment.
Verifies the complete pipeline works end-to-end.
"""

import sys
from pathlib import Path

# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent))

from core import AssetPipeline, QUALITY_PRESETS
from utils import MemoryManager


def test_mesh_generation():
    """Test complete mesh generation pipeline."""
    
    print("=" * 80)
    print("๐Ÿงช MESH GENERATION TEST")
    print("=" * 80)
    print()
    
    # Initialize
    print("๐Ÿ“ฆ Initializing pipeline...")
    memory_manager = MemoryManager()
    memory_manager.setup_cuda_optimizations()
    
    pipeline = AssetPipeline()
    print("   โœ… Pipeline initialized")
    print()
    
    # Test configuration
    test_cases = [
        {
            "name": "Fast Generation",
            "prompt": "medieval knight with detailed armor",
            "quality": "Fast",
            "expected_time": 45
        },
        {
            "name": "Balanced Generation",
            "prompt": "futuristic mech robot, game asset",
            "quality": "Balanced",
            "expected_time": 60
        }
    ]
    
    results = []
    
    for i, test in enumerate(test_cases, 1):
        print(f"๐ŸŽฏ Test {i}/{len(test_cases)}: {test['name']}")
        print(f"   Prompt: {test['prompt']}")
        print(f"   Quality: {test['quality']}")
        print(f"   Expected time: ~{test['expected_time']}s")
        print()
        
        try:
            # Generate asset
            print("   ๐Ÿš€ Generating...")
            result = pipeline.generate(
                prompt=test['prompt'],
                quality=test['quality']
            )
            
            # Verify result
            if result.glb_path and result.glb_path.exists():
                file_size_mb = result.glb_path.stat().st_size / 1e6
                
                print(f"   โœ… SUCCESS!")
                print(f"   ๐Ÿ“Š Generation time: {result.metadata.generation_time_s:.1f}s")
                print(f"   ๐Ÿ“ฆ File size: {file_size_mb:.2f} MB")
                print(f"   ๐ŸŽจ FLUX steps: {result.metadata.flux_steps}")
                print(f"   ๐ŸŽจ Hunyuan steps: {result.metadata.hunyuan_steps}")
                print(f"   ๐Ÿ”ง Optimized: {result.metadata.optimized}")
                print(f"   ๐Ÿ’พ Cached: {result.cached}")
                print(f"   ๐Ÿ“ Output: {result.glb_path}")
                
                results.append({
                    "test": test['name'],
                    "success": True,
                    "time": result.metadata.generation_time_s,
                    "size_mb": file_size_mb,
                    "cached": result.cached
                })
            else:
                print(f"   โŒ FAILED: No output file")
                results.append({
                    "test": test['name'],
                    "success": False,
                    "error": "No output file"
                })
        
        except Exception as e:
            print(f"   โŒ FAILED: {e}")
            results.append({
                "test": test['name'],
                "success": False,
                "error": str(e)
            })
        
        print()
    
    # Summary
    print("=" * 80)
    print("๐Ÿ“Š TEST SUMMARY")
    print("=" * 80)
    print()
    
    success_count = sum(1 for r in results if r.get('success', False))
    total_count = len(results)
    
    print(f"โœ… Passed: {success_count}/{total_count}")
    print(f"โŒ Failed: {total_count - success_count}/{total_count}")
    print()
    
    if success_count == total_count:
        print("๐ŸŽ‰ ALL TESTS PASSED!")
        print()
        print("โœจ Pipeline is ready for deployment!")
        print()
        print("Next steps:")
        print("1. Run: .\\FINAL_DEPLOYMENT.ps1")
        print("2. Wait 5-10 minutes for Space to build")
        print("3. Test on HF Space with same prompts")
        print()
        return True
    else:
        print("โš ๏ธ SOME TESTS FAILED")
        print()
        print("Failed tests:")
        for r in results:
            if not r.get('success', False):
                print(f"   โ€ข {r['test']}: {r.get('error', 'Unknown error')}")
        print()
        print("Fix errors before deployment!")
        print()
        return False


if __name__ == "__main__":
    try:
        success = test_mesh_generation()
        sys.exit(0 if success else 1)
    except KeyboardInterrupt:
        print("\n\nโš ๏ธ Test interrupted by user")
        sys.exit(1)
    except Exception as e:
        print(f"\n\nโŒ Test failed with error: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)