2017-08-14 2 views
8

Ich schreibe eine Sammlung von Beispielraumlecks in Haskell und möchte eine Testsuite schreiben, um mich selbst einzufangen, falls ich Beispiele einfüge, die nicht wirklich Platz verlieren.Testen Sie, dass eine Haskell-Funktion ein Leerzeichen hat

Gibt es eine Möglichkeit, die Beispiele zu testen, ohne für jede einzelne eine separate ausführbare Datei zu erstellen?

+4

Neil Mitchell hat eine sehr effektive und sehr Low-Tech-Technik auf seinem Blog beschrieben: [Detecting Raum Leaks ] (http: // neilmitchell.blogspot.com/2015/09/detecting-space-leaks.html). – Cactus

+0

In einigen Zukunft wäre es möglich, dies mit statischen Analysatoren zu überprüfen :) Wenn dies formalisiert werden kann, dann ist das Erkennen von Platzlecks nur eine Frage des implementierenden Algorithmus. – Shersh

+0

@Cactus: Das ist ein toller Artikel. Leider weiß ich nicht, ob es möglich ist, die Ausnahmen zu erfassen, die generiert werden, wenn Sie keinen Speicher mehr haben (was sinnvoll ist). Ich habe versucht, die Ausnahme in einem anderen Prozess mit 'System.Posix.process.forkProcess' zu generieren und es mit' ClassyPrelude.catchAny' einzufangen, aber es rutscht immer noch durch und stürzt die Testsuite ab. – seagreen

Antwort

2

Sie können ein Leck im Raum mit Test erkennen, aber Sie können keine Abwesenheit von Platzlecks nachweisen. Selbst wenn das Speicherprofil relativ niedrig ist, kann es darauf hinweisen, dass das Speicherleck sehr klein ist und Sie nicht genügend Iterationen durchgeführt haben.

Um Platz Lecks erkennen Sie Zuordnung Grenzen und Zähler verwenden kann, wie hier beschrieben May I limit memory usage per function/monad/thread in Haskell?

Verwandte Themen