using NUnit.Framework; namespace InverseOfLife.Test; [TestFixture] public class EvoluteTests { [Test] public void Mutate_ShouldModifyBitsBasedOnRate() { int resolution = 3; byte[] riboseSequence = [0b10101010, 0b11110000, 0b00001111, 0b00110011]; var gene = new Gene(resolution, riboseSequence); float mutationRate = 1.0f; var mutatedGene = gene.Mutate(0, mutationRate); Assert.That(mutatedGene.RiboseSequence, Is.Not.EqualTo(riboseSequence)); } [Test] public void Mutate_WithZeroRate_ShouldNotChangeRiboseSequence() { int resolution = 3; byte[] riboseSequence = [0b10101010, 0b11110000, 0b00001111, 0b00110011]; var gene = new Gene(resolution, riboseSequence); float mutationRate = 0.0f; var mutatedGene = gene.Mutate(0, mutationRate); Assert.That(mutatedGene.RiboseSequence, Is.EqualTo(riboseSequence)); } [Test] public void Mutate_WithSpecificRiboseIndex_ShouldOnlyAffectSpecifiedIndex() { int resolution = 3; byte[] riboseSequence = [0b10101010, 0b11110000, 0b00001111, 0b00001111]; var gene = new Gene(resolution, riboseSequence); float mutationRate = 0.5f; int riboseIndex = 1; var mutatedGene = gene.Mutate(riboseIndex, mutationRate); Assert.That(mutatedGene.RiboseSequence[0], Is.EqualTo(riboseSequence[0])); } }