Paracooba: Multi-Core Distributed Multi-Problem Cube-And-Conquer SAT-Solver

Nach einem Jahr harter Arbeit, können meine Kollegen vom FMV und ich nun Stolz den SAT-Solver Paracooba präsentieren! Er verteilt beliebig viele Probleme automatisch an alle anderen Instanzen im lokalen Netzwerk und erreicht über einen Cube-And-Conquer Mechanismus höhere Geschwindigkeiten durch parallelisiertes Lösen von SAT Problemen.

Um das alles gut darzustellen, haben wir ein Paper geschrieben, welches in den Proceedings der SAT2020 Konferenz veröffentlicht wird. Außerdem gibt es noch einen 2 minütigen Pitch-Talk und eine vollständige Präsentation, die zusammen mit den Slides hier zu finden sind. Auf YouTube ist die Präsentation ebenfalls hochgeladen.

Die Präsentation hat den Best Presentation Award gewonnen!

Ich freue mich schon, weiterhin an diesem spannenden Projekt arbeiten zu können und von euch zu hören!

Liebe Grüße,
Max

Script zum automatischen Testen eines Programms mit festgelegten Inputs und Outputs

Um in Systems Programming automatisch Tests der letzten C Exercise durchführen zu können, wurde ein kleines Script praktisch, welches automatisch die eigene Binary für alle input.txt Dateien überprüft. Man legt es neben zwei Ordner namens „input“ und „output“, welche die passenden Dateien für die Tests beinhalten (wie im gegebenen Beispielordner)

# Aufruf
./test.sh build/minesweeper

Das Script ist hier in einem eigenen Gist enthalten, im folgenden als Auszug dabei und als Archiv auch als Datei an diesen Artikel angehängt.

#! /usr/bin/env bash

# This test script tries all inputs and compares them with
# their respective outputs. Supply it with
# the name of the executable.

name=$1

# Color Constants
SUCCESS_COLOR='\033[0;32m'
ERROR_COLOR='\033[0;31m'
NO_COLOR='\033[0m'

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"

if [ "$#" -ne 1 ]; then
    echo "Must supply path to minesweeper executable!"
    exit
fi

if [[ ! -x "$name" ]]; then
    echo "The file must be the executable!"
    exit
fi

echo "Running tests for binary in \"$name\"."
echo "Path of tests: \"$DIR\""

for file in $DIR/input/*.txt; do
    testname="${file##*/}"
    outputname="${testname/input/output}"

    expected=$(cat $DIR/output/$outputname)
    result=$($name $file)

    (diff <(echo "$result") <(echo "$expected") && printf "${SUCCESS_COLOR}Test in $file ran successful! $NO_COLOR \n") || printf "${ERROR_COLOR}Test in $file failed! $NO_COLOR\n"
done