Testen einer auto-generierten GLM/C# Library

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Testen einer auto-generierten GLM/C# Library

Beitrag von Artificial Mind »

Hi, ich würde gerne mal etwas brainstormen.

Ich habe in den letzten Tagen folgendes Projekt angefangen:
https://github.com/Philip-Trettner/GlmSharp

Das ist eine C#/.NET Variante von der http://glm.g-truc.net (GLM) lib von Christophe Riccio.
Ich habe die Lib nicht selbst geschrieben sondern einen Generator, der die Lib erstellt.
Das ist insbesondere deswegen praktisch, weil die Library mittlerweile ca. 40.000 LOC hat und die meisten Funktionen ausgerollt sind (für Performance).
Außerdem sind die Templates aus C++ ausgerollt (da C# kein entsprechendes Konzept hat), das führt auch zu viel Code Duplication.

Lange Rede, kurzer Sinn: Ich möchte die Library testen und brauche Ideen wie man vernünftig Tests generiert.

Folgende Ideen habe ich schon:

Einen Generator für Konstanten (alle Konstruktoren, besondere Werte (0, 0.5, 1, -1, inf, nan, ...), small-range Integers, random Werte).
Dann manuell eine Reihe von symbolischen Invarianten definieren (z. B. "a op b == b op a" für kommutative operatoren oder "a.Normalized.Length ~ 1" für non-Zero "a").
Für alle generierten Konstanten und passenden Invarianten kann ich einen Test generieren.

Ansonsten kann ich mir auch vorstellen, zufällige Syntax Trees in C++ zu generieren und dann das originale GLM auszuwerten. Dann kann ich aus Syntax-Tree + Referenzwert einen Test generieren. Das ergibt eine ganze Menge sehr expliziter Tests.

Habt ihr noch gute Ideen?
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Testen einer auto-generierten GLM/C# Library

Beitrag von Alexander Kornrumpf »

Was man machen könnte, ist die Referenzimplementierung so zu verändern, dass sie Aufrufe in irgendeiner Form loggt, diverse realweltprojekte dagegen bauen und laufen lassen und aus den gewonnenen Daten Testcases generieren.
Antworten