Silex v0.47.1 / Docs Source canonique ↗

Écrire et lancer des tests

Un bloc test décrit un scénario indépendant. Placez-le à la racine d'un fichier .sx, puis vérifiez le résultat attendu avec assert :

func double(value:int) int {
    return value * 2
}

test "doubler un entier" {
    assert(double(21) == 42)
}

Lancez tous les blocs du fichier avec :

silex test Tests/Numbers.sx

Une exécution réussie affiche le scénario puis un résumé :

ok - doubler un entier
1 passed; 0 failed

La commande retourne un code différent de zéro lorsqu'un test échoue ou qu'une source ne peut pas être compilée. Un échec arrête le bloc concerné, mais les blocs suivants continuent de s'exécuter. Chaque scénario compilé est isolé dans son propre processus : un panic ou un arrêt par signal ne peut donc pas interrompre toute la campagne.

test utilise le backend natif par défaut sur tous les hôtes. LLVM reste disponible explicitement sur macOS ARM64 pour comparer ou diagnostiquer :

silex test Tests/Numbers.sx --backend native
silex test Tests/Numbers.sx --backend llvm

Tester tout un dossier

Passez un dossier pour découvrir récursivement les fichiers .sx qui contiennent au moins un bloc test :

silex test Tests

Les fichiers sont exécutés dans l'ordre lexicographique. Les racines de plateforme ou de cible qui ne correspondent pas à la machine actuelle sont ignorées. Un dossier sans test réussit avec un rapport contenant zéro test.

Dans le rapport d'un dossier, chaque scénario est précédé du chemin relatif de sa source :

ok - Numbers.sx :: doubler un entier

Seuls les blocs du fichier physique sélectionné sont activés. Les tests placés dans ses dépendances ne sont pas exécutés indirectement.

Nommer et isoler les scénarios

La description est facultative. Un bloc anonyme est identifié par sa ligne :

test {
    assert(2 + 2 == 4)
}

Chaque bloc peut déclarer ses propres fonctions locales. Elles sont visibles uniquement dans ce scénario et ne capturent pas ses variables : transmettez leurs données par paramètres.

test "additionner deux valeurs" {
    func add(left:int, right:int) int {
        return left + right
    }

    assert(add(20, 22) == 42, "la somme attendue vaut 42")
}

Les blocs test n'appartiennent pas au programme ordinaire : run, interpret et compile ne les ajoutent ni à l'IR ni à l'exécutable.

Reproduire un test sans cache

Silex conserve ses artefacts de test privés sous .silex/test. Pour forcer leur reconstruction, utilisez :

silex test Tests --nocache

--emit-ir écrit également l'IR de chaque source sélectionnée avant son rapport. Ces deux options servent surtout au diagnostic ; la commande ordinaire reste silex test <fichier|dossier>.

Revenir aux outils · Exécuter, interpréter ou compiler un programme · Consulter la référence de la CLI