2013-05-27 4 views
8

Ich trage zu einem R-Paket bei, das umfangreichen C-Code für die Berechnung verwendet.Unit-Tests für Code im Ordner/src eines R-Pakets?

Wir haben begonnen, Tests für R-Funktionen unter Verwendung des testthat-Pakets zu schreiben, indem wir die Tests in inst/tests nach instructions here platzieren.

Ist das Testpaket für den direkten Test von C-Funktionen geeignet (z. B. solche ohne R-Schnittstellen)? Oder finden wir ein separates C-Testpaket? Wenn ja, 1) Wo sollten diese Tests hingehen, 2) Wie bekomme ich sie während R CMD check, und 3) ist ein C-Test-Paket in diesem Zusammenhang besonders geeignet?

Antwort

3

Ich finde die Frage ein wenig verwirrt:

  • Entweder Sie als Ihren C-Code zur Unterstützung höherer Ebene R-Funktionen, die Sie bei der R testen können (wie Sie getan zu haben scheinen)

  • Oder Sie betrachten Sie Ihre C-Code mehr Standalone zu sein, in dem Fall, dass Sie eine von bazillion Einheit Test-Frameworks für C.

nutzen könnten viele der Pakete uns In Rcpp werden auch umfangreiche Komponententests durchgeführt, entweder über RUnit oder über Tests. Du könntest dir das ansehen. Ich teste generell auf der R-Funktionsebene, was oft einen Test der zugrundeliegenden C++ - Funktion impliziert.

+0

Es gibt eine Menge R-Funktionen, die C-Funktionen aufrufen, und ich kann diese aus R testen. Es gibt jedoch auch C-Funktionen, die nie von R aufgerufen werden, und wir produzieren mehr von diesen, wenn wir sie neu berechnen es ist wirklich keine eigenständige Bibliothek. –

+0

Ich folge, dass das Schreiben von R-Wrappern in C-Funktionen mit Rcpp, basierend auf der [Rcpp-Paketbeschreibung] (http://cran.r-project.org/web/packages/Rcpp/index.html), die besagt " ein Framework, das es ermöglicht, C++ - Funktionen und -Klassen der R-Ebene auszusetzen ". Vielleicht ist der Ansatz, den ich geerbt habe, suboptimal, aber wir haben viele Listen mit variierten Parametern bestanden. –

+0

Wenn Sie auf Rcpp lesen (insbesondere, was wir _Rcpp Attribute_ nennen), werden Sie sehen, dass das Wrapping von C (und C++) Funktionen jetzt trivial und voll automatisiert ist. –

Verwandte Themen