175 lines
4.6 KiB
Markdown
175 lines
4.6 KiB
Markdown
|
|
# Codegen Tests - Summary
|
||
|
|
|
||
|
|
## Organization
|
||
|
|
|
||
|
|
The codegen tests have been organized into a dedicated `tests/codegen/` subdirectory with the following structure:
|
||
|
|
|
||
|
|
```
|
||
|
|
tests/codegen/
|
||
|
|
├── README.md # Comprehensive documentation
|
||
|
|
├── TESTING.md # Testing instructions
|
||
|
|
├── SUMMARY.md # This file
|
||
|
|
├── test_executable.* # Simple arithmetic test
|
||
|
|
├── test_array_simple.* # Array operations test
|
||
|
|
├── test_enum_simple.* # Enum types test
|
||
|
|
├── test_comprehensive.* # Mixed types test
|
||
|
|
└── test_all_types.* # Type coverage test
|
||
|
|
```
|
||
|
|
|
||
|
|
Each test has two files:
|
||
|
|
- `.sui` - Source code in the suicmez language
|
||
|
|
- `.c` - Generated C code with debug output
|
||
|
|
|
||
|
|
## What Was Cleaned Up
|
||
|
|
|
||
|
|
Removed from root directory:
|
||
|
|
- `simple.sui`, `simple_test.*` - Incomplete test files
|
||
|
|
- `syntax_test.sui` - Old syntax exploration
|
||
|
|
- `test_affine.sui`, `test_binding.sui` - Abandoned tests
|
||
|
|
- `test_linear*.sui` - Linear type system experiments
|
||
|
|
- `test_scoping.sui`, `test_shadow.sui` - Scoping tests
|
||
|
|
- Other misc test files
|
||
|
|
|
||
|
|
Kept in root (valid existing tests):
|
||
|
|
- None - all valid tests are now organized in `tests/` subdirectories
|
||
|
|
|
||
|
|
## Test Files
|
||
|
|
|
||
|
|
### New Codegen Tests (in `tests/codegen/`)
|
||
|
|
|
||
|
|
1. **test_executable** - Minimal executable test
|
||
|
|
- Basic integer operations
|
||
|
|
- Function calls
|
||
|
|
- Return values
|
||
|
|
|
||
|
|
2. **test_array_simple** - Array functionality
|
||
|
|
- Array literals: `[1, 2, 3]`
|
||
|
|
- Array indexing: `arr[0]`
|
||
|
|
- Pointer-based array representation
|
||
|
|
|
||
|
|
3. **test_enum_simple** - Enumeration types
|
||
|
|
- Enum variants
|
||
|
|
- Discriminant + union pattern
|
||
|
|
- Struct ordering
|
||
|
|
|
||
|
|
4. **test_comprehensive** - Combined features
|
||
|
|
- All basic types (int, float, bool, string)
|
||
|
|
- Structs with multiple fields
|
||
|
|
- Enums with variants
|
||
|
|
- Arrays with complex operations
|
||
|
|
- Function calls with parameters
|
||
|
|
|
||
|
|
5. **test_all_types** - Complete type coverage
|
||
|
|
- Exhaustive test of all language types
|
||
|
|
- Demonstrates each type independently
|
||
|
|
- Shows debug output for each
|
||
|
|
|
||
|
|
### Existing Tests (preserved in `tests/`)
|
||
|
|
|
||
|
|
- `arrays.sui` - Additional array tests
|
||
|
|
- `basic_types.sui/c` - Basic type tests
|
||
|
|
- `control_flow.sui/c` - If/while/for loops
|
||
|
|
- `enums.sui` - Enum functionality
|
||
|
|
- `functions.sui/c` - Function definitions
|
||
|
|
- `generics_comprehensive.sui/c` - Generic types
|
||
|
|
- `import_tests/` - Module imports
|
||
|
|
- `pointers.sui` - Pointer operations
|
||
|
|
- `structs.sui/c` - Struct definitions
|
||
|
|
- `traits.sui/c` - Trait system
|
||
|
|
- And more...
|
||
|
|
|
||
|
|
## Features Demonstrated
|
||
|
|
|
||
|
|
### Memory Management
|
||
|
|
- Stack allocation: `int`, `float`, `bool`
|
||
|
|
- Heap allocation: arrays with pointers
|
||
|
|
- Strings as `char*`
|
||
|
|
- Structs and enums stack-allocated
|
||
|
|
|
||
|
|
### Language Features
|
||
|
|
- Variable declarations and assignments
|
||
|
|
- Function definitions and calls
|
||
|
|
- Struct literals with initialization
|
||
|
|
- Enum variants with discriminants
|
||
|
|
- Array literals and indexing
|
||
|
|
- Type conversions (implicit)
|
||
|
|
|
||
|
|
### Debug Output
|
||
|
|
Every statement generates debug output:
|
||
|
|
```c
|
||
|
|
int x = 10;
|
||
|
|
printf("| int x = 10 | \n %d\n", x);
|
||
|
|
// Output: | int x = 10 |
|
||
|
|
// 10
|
||
|
|
```
|
||
|
|
|
||
|
|
## Running the Tests
|
||
|
|
|
||
|
|
### Quick Check
|
||
|
|
```bash
|
||
|
|
cd /home/nafi/langjam/suicmez
|
||
|
|
for f in tests/codegen/*.sui; do
|
||
|
|
./target/debug/suicmez "$f" > /dev/null && echo "✓ $(basename $f)"
|
||
|
|
done
|
||
|
|
```
|
||
|
|
|
||
|
|
### Full Test Run
|
||
|
|
```bash
|
||
|
|
# Regenerate all C code
|
||
|
|
for f in tests/codegen/*.sui; do
|
||
|
|
./target/debug/suicmez "$f"
|
||
|
|
done
|
||
|
|
|
||
|
|
# Compile all tests
|
||
|
|
for f in tests/codegen/*.c; do
|
||
|
|
gcc "$f" -o "/tmp/$(basename ${f%.c})"
|
||
|
|
done
|
||
|
|
|
||
|
|
# Run all tests
|
||
|
|
for exe in /tmp/test_*; do
|
||
|
|
echo "Running $(basename $exe)..."
|
||
|
|
"$exe" 2>&1 | head -5
|
||
|
|
echo ""
|
||
|
|
done
|
||
|
|
```
|
||
|
|
|
||
|
|
### Individual Test
|
||
|
|
```bash
|
||
|
|
./target/debug/suicmez tests/codegen/test_comprehensive.sui
|
||
|
|
gcc tests/codegen/test_comprehensive.c -o /tmp/test
|
||
|
|
/tmp/test
|
||
|
|
```
|
||
|
|
|
||
|
|
## Quality Assurance
|
||
|
|
|
||
|
|
All codegen tests:
|
||
|
|
- ✅ Generate valid C99 code
|
||
|
|
- ✅ Compile with GCC without errors
|
||
|
|
- ✅ Execute successfully
|
||
|
|
- ✅ Display proper debug output
|
||
|
|
- ✅ Return correct values
|
||
|
|
- ✅ Include comprehensive documentation
|
||
|
|
|
||
|
|
## Documentation
|
||
|
|
|
||
|
|
- **README.md** - Feature overview and structure
|
||
|
|
- **TESTING.md** - How to run and troubleshoot tests
|
||
|
|
- **SUMMARY.md** - This file, organization summary
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
To add new codegen tests:
|
||
|
|
1. Create `test_feature.sui` in `tests/codegen/`
|
||
|
|
2. Run transpiler: `./target/debug/suicmez tests/codegen/test_feature.sui`
|
||
|
|
3. Verify C code: `gcc tests/codegen/test_feature.c -c`
|
||
|
|
4. Test execution: `gcc tests/codegen/test_feature.c -o /tmp/test && /tmp/test`
|
||
|
|
5. Document in README.md
|
||
|
|
|
||
|
|
## Files Status
|
||
|
|
|
||
|
|
✅ All files properly organized
|
||
|
|
✅ All tests generate valid C code
|
||
|
|
✅ All tests compile and run
|
||
|
|
✅ Documentation complete
|
||
|
|
✅ Debug output working
|
||
|
|
✅ Root directory cleaned
|