Ci sono un paio di cose che potresti provare:
- Cerca di trovare alcuni valori di esempio che sono "ovviamente corretti" (nel senso che qualsiasi programmatore di manutenzione futuro può facilmente vedere che e perché sono corretti e verificare la loro correttezza nelle loro teste senza usare un calcolatore)
- Cerca la carta da cui deriva l'algoritmo e vedi se hanno degli esempi elencati qui, se sì, convertili in casi di test (e inserisci i riferimenti alla carta nel commento della documentazione del metodo di prova)
- Fornire "ovviamente corrette" le traduzioni 1: 1 dell'algoritmo dal documento in una o più lingue separate di altissimo livello (Matlab, Mathematica, Idris, Haskell, Julia, Python, ...) e scrivere uno script generare casi di test usando quelle implementazioni "ovviamente corrette". Lo script dovrebbe essere scritto in modo tale da poter facilmente verificare che i test test generati siano corretti.
- Cerca di trovare la traduzione 1: 1 più semplice e più vicina dell'algoritmo (o dell'equazione) nel tuo linguaggio di test, e usala per testare l'effettiva implementazione.
In quest'ultimo caso, potrebbe benissimo essere che l'implementazione nel caso di test e l'implementazione nel codice di produzione finiscono per essere identiche. Tuttavia, dovrebbe essere solo una coincidenza, non un obiettivo. Devi non copiare e incollare l'implementazione.
Ora, perché un tale caso di test, in cui il codice nel test e il codice nel codice di produzione sono identici, è utile? Bene, semplicemente: le modifiche al codice. I test di solito no.
Se esiste una cosa vera per qualsiasi parte di una pipeline grafica, allora è troppo lenta. Ora, probabilmente stai pensando: "il mio codice non è troppo lento!" E probabilmente hai ragione. Per il tuo caso d'uso. Per ora.
Ma credimi: a volte, da qualche parte, qualcuno avrà una pazza idea. Forse vogliono usare la tua libreria per l'elaborazione video in tempo reale in un impianto oculare alimentato dall'energia bioelettrica dell'occhio umano, e quindi con un budget di potenza seriamente limitato (e quindi un processore molto lento). Forse è un progetto artistico e vogliono rendere il video in tempo reale sull'intero muro cinese e quindi devono essere in grado di riprodurre trilioni di pixel a 60 Hz.
E poi dovrai ugolare il tuo algoritmo. Inserisci scorciatoie. Srotolare manualmente i loop. Scaricalo sulla GPU. Riscrivilo in assemblea. Forse anche implementarlo nell'hardware.
Tuttavia, il tuo test unitario sarà sempre lo stesso semplice, facilmente leggibile, facilmente comprensibile, codice di sicurezza, che funge da rete di sicurezza per tutte le cose pazze e brutte che devi fare al tuo codice di produzione, perché, beh, i vincoli reali avvengono.