Files
Omika/tests/Omika.Tests/Mobile/ConfigurationModeleTests.cs
2026-10-23 18:46:50 +02:00

88 lines
2.7 KiB
C#

using Omika.App.Local.Models;
namespace Omika.Tests.Mobile;
/// <summary>
/// Tests des conventions de génération lues dans <c>config.json</c>.
///
/// <para>
/// Les valeurs reproduisent deux modèles réels : <c>opus-mt-es-fr</c>
/// (départ 74821, fin 0) et <c>opus-mt-tc-big-itc-itc</c> (départ 35282, fin
/// 29158). Aucune ne correspond aux identifiants du fichier <c>.spm</c>, que le
/// moteur utilisait jusqu'ici.
/// </para>
/// </summary>
public class ConfigurationModeleTests
{
[Fact]
public void DepuisJson_LitLesIdentifiantsDuModele()
{
const string json = """
{
"decoder_start_token_id": 35282,
"eos_token_id": 29158,
"pad_token_id": 35282,
"model_type": "marian"
}
""";
ConfigurationModele? configuration = ConfigurationModele.DepuisJson(json);
Assert.NotNull(configuration);
Assert.Equal(35282, configuration.IdDebutDecodeur);
Assert.Equal(29158, configuration.IdFin);
Assert.Equal(35282, configuration.IdRemplissage);
}
[Fact]
public void DepuisJson_FinAZero_EstUneValeurValide()
{
// 0 est un identifiant parfaitement légitime : sur opus-mt-es-fr, c'est
// </s>. Le confondre avec « absent » ferait générer jusqu'à la limite.
const string json = """{ "decoder_start_token_id": 74821, "eos_token_id": 0 }""";
ConfigurationModele? configuration = ConfigurationModele.DepuisJson(json);
Assert.NotNull(configuration);
Assert.Equal(0, configuration.IdFin);
}
[Fact]
public void DepuisJson_CleAbsente_ResteNulle()
{
ConfigurationModele? configuration = ConfigurationModele.DepuisJson("""{ "eos_token_id": 29158 }""");
Assert.NotNull(configuration);
Assert.Null(configuration.IdDebutDecodeur);
Assert.Equal(29158, configuration.IdFin);
}
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData("[]")]
[InlineData("null")]
public void DepuisJson_ContenuSansObjet_EstTraiteCommeAbsent(string? json)
{
Assert.Null(ConfigurationModele.DepuisJson(json));
}
[Fact]
public void DepuisJson_ValeurNonNumerique_EstIgnoree()
{
const string json = """{ "eos_token_id": "29158", "pad_token_id": -5 }""";
ConfigurationModele? configuration = ConfigurationModele.DepuisJson(json);
Assert.NotNull(configuration);
Assert.Null(configuration.IdFin);
Assert.Null(configuration.IdRemplissage);
}
[Fact]
public void DepuisJson_JsonInvalide_EstRefuse()
{
Assert.Throws<FormatException>(() => ConfigurationModele.DepuisJson("{ pas du json"));
}
}