Add: [n-queens] in [c++] #32
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: π§ͺ Multi-Language Testing | |
| on: | |
| pull_request: | |
| branches: [ main ] | |
| push: | |
| branches: [ main ] | |
| jobs: | |
| detect-changes: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| c-cpp-changed: ${{ steps.changes.outputs.c_cpp }} | |
| java-changed: ${{ steps.changes.outputs.java }} | |
| python-changed: ${{ steps.changes.outputs.python }} | |
| javascript-changed: ${{ steps.changes.outputs.javascript }} | |
| go-changed: ${{ steps.changes.outputs.go }} | |
| rust-changed: ${{ steps.changes.outputs.rust }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@v2 | |
| id: changes | |
| with: | |
| filters: | | |
| c_cpp: | |
| - 'C/**' | |
| - 'CPP/**' | |
| java: | |
| - 'Java/**' | |
| python: | |
| - 'Python/**' | |
| javascript: | |
| - '**/*.js' | |
| - 'JavaScript/**' | |
| go: | |
| - '**/*.go' | |
| - 'Go/**' | |
| rust: | |
| - '**/*.rs' | |
| - 'Rust/**' | |
| test-c-cpp: | |
| runs-on: ubuntu-latest | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.c-cpp-changed == 'true' | |
| steps: | |
| - name: π₯ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: π§ Setup C/C++ environment | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y gcc g++ make | |
| - name: π Get C/C++ files | |
| id: cpp-files | |
| run: | | |
| echo "files<<EOF" >> $GITHUB_OUTPUT | |
| find C/ CPP/ -name "*.c" -o -name "*.cpp" 2>/dev/null || echo "No C/C++ files found" | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| - name: π§ͺ Test C files | |
| run: | | |
| echo "π Testing C files..." | |
| find C/ -name "*.c" -type f 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| gcc -o "${file%.c}" "$file" -lm | |
| if [ $? -eq 0 ]; then | |
| echo "β $file compiled successfully" | |
| # Run basic execution test if file has main function | |
| if grep -q "int main" "$file"; then | |
| echo "Running: $file" | |
| timeout 5s "./${file%.c}" < /dev/null || echo "β οΈ Runtime test completed" | |
| fi | |
| else | |
| echo "β $file failed to compile" | |
| exit 1 | |
| fi | |
| done || echo "No C files to test" | |
| - name: π§ͺ Test C++ files | |
| run: | | |
| echo "π Testing C++ files..." | |
| find CPP/ -name "*.cpp" -type f 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| g++ -std=c++17 -o "${file%.cpp}" "$file" | |
| if [ $? -eq 0 ]; then | |
| echo "β $file compiled successfully" | |
| # Run basic execution test if file has main function | |
| if grep -q "int main" "$file"; then | |
| echo "Running: $file" | |
| timeout 5s "./${file%.cpp}" < /dev/null || echo "β οΈ Runtime test completed" | |
| fi | |
| else | |
| echo "β $file failed to compile" | |
| exit 1 | |
| fi | |
| done || echo "No C++ files to test" | |
| test-java: | |
| runs-on: ubuntu-latest | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.java-changed == 'true' | |
| steps: | |
| - name: π₯ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: β Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: π§ͺ Test Java files | |
| run: | | |
| echo "π Testing Java files..." | |
| find Java/ -name "*.java" -type f 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| javac "$file" | |
| if [ $? -eq 0 ]; then | |
| echo "β $file compiled successfully" | |
| # Try to run if it has main method | |
| if grep -q "public static void main" "$file"; then | |
| classname=$(basename "${file%.java}") | |
| echo "Running: $classname" | |
| timeout 5s java -cp "$(dirname "$file")" "$classname" < /dev/null || echo "β οΈ Runtime test completed" | |
| fi | |
| else | |
| echo "β $file failed to compile" | |
| exit 1 | |
| fi | |
| done || echo "No Java files to test" | |
| test-python: | |
| runs-on: ubuntu-latest | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.python-changed == 'true' | |
| strategy: | |
| matrix: | |
| python-version: ['3.8', '3.11'] | |
| steps: | |
| - name: π₯ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: π Setup Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: π¦ Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| # Install common packages for algorithms | |
| pip install numpy scipy matplotlib pandas | |
| - name: π§ͺ Test Python files | |
| run: | | |
| echo "π Testing Python files with Python ${{ matrix.python-version }}..." | |
| find Python/ -name "*.py" -type f 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| python -m py_compile "$file" | |
| if [ $? -eq 0 ]; then | |
| echo "β $file syntax is valid" | |
| # Try to run if it has main guard | |
| if grep -q "if __name__ == ['\"]__main__['\"]" "$file"; then | |
| echo "Running: $file" | |
| timeout 5s python "$file" < /dev/null || echo "β οΈ Runtime test completed" | |
| fi | |
| else | |
| echo "β $file has syntax errors" | |
| exit 1 | |
| fi | |
| done || echo "No Python files to test" | |
| test-javascript: | |
| runs-on: ubuntu-latest | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.javascript-changed == 'true' | |
| steps: | |
| - name: π₯ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: π¨ Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| - name: π§ͺ Test JavaScript files | |
| run: | | |
| echo "π Testing JavaScript files..." | |
| find . -name "*.js" -type f -not -path "./node_modules/*" 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| node -c "$file" | |
| if [ $? -eq 0 ]; then | |
| echo "β $file syntax is valid" | |
| # Basic execution test | |
| timeout 5s node "$file" < /dev/null || echo "β οΈ Runtime test completed" | |
| else | |
| echo "β $file has syntax errors" | |
| exit 1 | |
| fi | |
| done || echo "No JavaScript files to test" | |
| test-go: | |
| runs-on: ubuntu-latest | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.go-changed == 'true' | |
| steps: | |
| - name: π₯ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: πΉ Setup Go | |
| uses: actions/setup-go@v4 | |
| with: | |
| go-version: '1.21' | |
| - name: π§ͺ Test Go files | |
| run: | | |
| echo "π Testing Go files..." | |
| find . -name "*.go" -type f 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| go build "$file" | |
| if [ $? -eq 0 ]; then | |
| echo "β $file compiled successfully" | |
| # Run if it has main function | |
| if grep -q "func main()" "$file"; then | |
| binary_name=$(basename "${file%.go}") | |
| if [ -f "./$binary_name" ]; then | |
| echo "Running: $binary_name" | |
| timeout 5s "./$binary_name" < /dev/null || echo "β οΈ Runtime test completed" | |
| rm -f "./$binary_name" | |
| fi | |
| fi | |
| else | |
| echo "β $file failed to compile" | |
| exit 1 | |
| fi | |
| done || echo "No Go files to test" | |
| test-rust: | |
| runs-on: ubuntu-latest | |
| needs: detect-changes | |
| if: needs.detect-changes.outputs.rust-changed == 'true' | |
| steps: | |
| - name: π₯ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: π¦ Setup Rust | |
| uses: actions-rs/toolchain@v1 | |
| with: | |
| toolchain: stable | |
| override: true | |
| - name: π§ͺ Test Rust files | |
| run: | | |
| echo "π Testing Rust files..." | |
| find . -name "*.rs" -type f 2>/dev/null | while read file; do | |
| echo "Testing: $file" | |
| rustc "$file" --edition 2021 | |
| if [ $? -eq 0 ]; then | |
| echo "β $file compiled successfully" | |
| # Run if it has main function | |
| if grep -q "fn main()" "$file"; then | |
| binary_name=$(basename "${file%.rs}") | |
| if [ -f "./$binary_name" ]; then | |
| echo "Running: $binary_name" | |
| timeout 5s "./$binary_name" < /dev/null || echo "β οΈ Runtime test completed" | |
| rm -f "./$binary_name" | |
| fi | |
| fi | |
| else | |
| echo "β $file failed to compile" | |
| exit 1 | |
| fi | |
| done || echo "No Rust files to test" | |
| test-summary: | |
| runs-on: ubuntu-latest | |
| needs: [detect-changes, test-c-cpp, test-java, test-python, test-javascript, test-go, test-rust] | |
| if: always() | |
| steps: | |
| - name: π Test Summary | |
| run: | | |
| echo "π§ͺ Multi-Language Testing Summary" | |
| echo "=================================" | |
| echo "" | |
| if [ "${{ needs.test-c-cpp.result }}" = "success" ]; then | |
| echo "β C/C++ tests passed" | |
| elif [ "${{ needs.test-c-cpp.result }}" = "failure" ]; then | |
| echo "β C/C++ tests failed" | |
| else | |
| echo "βοΈ C/C++ tests skipped" | |
| fi | |
| if [ "${{ needs.test-java.result }}" = "success" ]; then | |
| echo "β Java tests passed" | |
| elif [ "${{ needs.test-java.result }}" = "failure" ]; then | |
| echo "β Java tests failed" | |
| else | |
| echo "βοΈ Java tests skipped" | |
| fi | |
| if [ "${{ needs.test-python.result }}" = "success" ]; then | |
| echo "β Python tests passed" | |
| elif [ "${{ needs.test-python.result }}" = "failure" ]; then | |
| echo "β Python tests failed" | |
| else | |
| echo "βοΈ Python tests skipped" | |
| fi | |
| if [ "${{ needs.test-javascript.result }}" = "success" ]; then | |
| echo "β JavaScript tests passed" | |
| elif [ "${{ needs.test-javascript.result }}" = "failure" ]; then | |
| echo "β JavaScript tests failed" | |
| else | |
| echo "βοΈ JavaScript tests skipped" | |
| fi | |
| if [ "${{ needs.test-go.result }}" = "success" ]; then | |
| echo "β Go tests passed" | |
| elif [ "${{ needs.test-go.result }}" = "failure" ]; then | |
| echo "β Go tests failed" | |
| else | |
| echo "βοΈ Go tests skipped" | |
| fi | |
| if [ "${{ needs.test-rust.result }}" = "success" ]; then | |
| echo "β Rust tests passed" | |
| elif [ "${{ needs.test-rust.result }}" = "failure" ]; then | |
| echo "β Rust tests failed" | |
| else | |
| echo "βοΈ Rust tests skipped" | |
| fi | |
| echo "" | |
| echo "π Testing completed for all applicable languages!" |