using Omika.App.Local.Models; namespace Omika.Tests.Mobile; /// /// Tests des conventions de génération lues dans config.json. /// /// /// Les valeurs reproduisent deux modèles réels : opus-mt-es-fr /// (départ 74821, fin 0) et opus-mt-tc-big-itc-itc (départ 35282, fin /// 29158). Aucune ne correspond aux identifiants du fichier .spm, que le /// moteur utilisait jusqu'ici. /// /// 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 // . 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(() => ConfigurationModele.DepuisJson("{ pas du json")); } }