fmidue / logic-tasks

0 stars 1 forks source link

Bereitstellung Anleitung zum lokalen Testen von Aufgaben #71

Closed nimec01 closed 2 weeks ago

nimec01 commented 9 months ago

Es wäre sinnvoll, wenn die Readme eine aktuelle Anleitung beinhalten würde, wie man die Aufgaben lokal austesten kann.

Die Anleitungen, die aktuell in #46 und #48 zu finden sind, funktionieren derzeit nicht. So führt folgender Aufruf nur zu einer Fehlermeldung:

stack repl
> :m + Control.Monad.Output
> :m + Test.QuickCheck
> generate (generateLegalCNFInst defaultLegalCNFConfig) >>= \inst -> LogicTasks.Syntax.IllegalCnfs.description inst `withLang` German

<interactive>:3:115: error:
    Variable not in scope: withLang :: LangM m0 -> Language -> IO b

Wenn man das Modul Control.Monad.Output.Generic noch hinzunimmt (welches eine Funktion withLang exportiert) führt der Aufruf nun zu folgender Fehlermeldung:

stack repl
> :m + Control.Monad.Output
> :m + Test.QuickCheck
> :m + Control.Monad.Output.Generic
> generate (generateLegalCNFInst defaultLegalCNFConfig) >>= \inst -> LogicTasks.Syntax.IllegalCnfs.description inst `withLang` German

<interactive>:5:68: error:
    • Couldn't match type ‘RunMonad Language m0’ with ‘IO’
      Expected: IO (Maybe ())
        Actual: RunMonad Language m0 (Maybe ())
      The type variable ‘m0’ is ambiguous
    • In the expression:
        LogicTasks.Syntax.IllegalCnfs.description inst `withLang` German
      In the second argument of ‘(>>=)’, namely
        ‘\ inst
           -> LogicTasks.Syntax.IllegalCnfs.description inst
                `withLang` German’
      In the expression:
        generate (generateLegalCNFInst defaultLegalCNFConfig)
          >>=
            \ inst
              -> LogicTasks.Syntax.IllegalCnfs.description inst `withLang` German

<interactive>:5:115: error:
    • Couldn't match type: Output Language m0
                     with: RunMonad Language m0 b0
        arising from a use of ‘withLang’
      The type variables ‘m0’, ‘b0’ are ambiguous
    • In the expression:
        LogicTasks.Syntax.IllegalCnfs.description inst `withLang` German
      In the second argument of ‘(>>=)’, namely
        ‘\ inst
           -> LogicTasks.Syntax.IllegalCnfs.description inst
                `withLang` German’
      In the expression:
        generate (generateLegalCNFInst defaultLegalCNFConfig)
          >>=
            \ inst
              -> LogicTasks.Syntax.IllegalCnfs.description inst `withLang` German

Der Auslöser für diese Probleme ist wohl eine Änderung in output-monad. Ein Upgrade auf eine noch aktuellere Version würde es erlauben auf die testTask Funktion zurückzugreifen. Generell wäre es aber erstmal wünschenswert, eine funktionierende Anleitung bereitzustellen.

jvoigtlaender commented 9 months ago

@owestphal, @marcellussiegburg, ich weiß nicht, wer von euch das hier am schnellsten adressieren könnte.

owestphal commented 9 months ago

Die testTask Funktion aus output-monad ist eine generalisierte Version von der entsprechenden Funktion in LogicTasks.Debug aus diesem Repo. Das Modul hatte ich fürs lokale Testen angelegt. Teile davon sollten in Zukunft durch die output-monad-Funktionen ersetzt werden. Aber für den Moment sollte das eigentlich ausreichen.

jvoigtlaender commented 8 months ago

Okay, aber wie sehen denn dann mal konkrete Aufrufe, sagen wir für zwei verschiedene Aufgabentypen, aus und welche Module müssen dafür vorab jeweils in den ghci geladen werden?

marcellussiegburg commented 8 months ago

Die lokale testTask-Funktion erfordert einen Parser (im zweiten Beispiel wäre das kürzer), konsistenterweise verwenden die folgenden Beispiele aber das testTask aus output-monad. Für LegalCNF:

:m +Control.Monad.Output.Debug Control.Monad.Output Test.QuickCheck
Control.Monad.Output.Debug.testTask English (generate (generateLegalCNFInst defaultLegalCNFConfig)) LogicTasks.Syntax.IllegalCnfs.description LogicTasks.Syntax.IllegalCnfs.partialGrade LogicTasks.Syntax.IllegalCnfs.completeGrade readLn

Für TreeToFormula:

:m +Control.Monad.Output.Debug Control.Monad.Output Test.QuickCheck Text.Parsec
Control.Monad.Output.Debug.testTask English (generate (generateSynTreeInst defaultSynTreeConfig)) (LogicTasks.Syntax.TreeToFormula.description "/tmp/") LogicTasks.Syntax.TreeToFormula.partialGrade LogicTasks.Syntax.TreeToFormula.completeGrade (either (error . show) id . parse parser "Input" <$> getLine)
jvoigtlaender commented 2 weeks ago

done via 4ca4d6479b34d4a7e9e362711354e95a4f43a626