using XFEEDToolBox.Core.Galaxy; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class GalaxyOriginalAppearanceTests { private static GalacticSystem Star(string type="G")=>new("Measured",new(0,0,0),StarClass:type); [Test] public void EconomyUsesTheAuthoredDefinitionColourForTheSelectedPrimaryOrSecondaryEconomy() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Economy}; var system=Star() with{Data=new(){Economy="Extraction",SecondaryEconomy="High Tech"}}; Check.Equal(new System.Numerics.Vector4(1,0,0,1),filter.GetOriginalRgba(system)!.Value); var secondary=filter with{Values=new HashSet{"hightech"}}; Check.That(secondary.Matches(system)); Check.Equal(new System.Numerics.Vector4(0,1,1,1),secondary.GetOriginalRgba(system)!.Value); Check.Equal(new StarColour(0,255,255),secondary.GetColour(system)); Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Economy,"Agri",out var agriculture)); Check.Equal(new GalaxyRawColour(.5f,1,0),agriculture); Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Economy,"Terraforming",out var terraforming)); Check.Equal(.6f,terraforming.G); } [Test] public void EconomyEnumsWithoutAnAuthoredRowDoNotBorrowOrCycleAnOriginalColour() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Economy}; foreach(var economy in new[]{"Repair","Rescue","Carrier","Corporate","Research","Future economy"}) { Check.That(!GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Economy,economy,out _)); Check.That(filter.GetOriginalRgba(Star() with{Data=new(){Economy=economy}}) is null); } } [Test] public void SourceFloatsPreserveHdrValuesWhileTheSdrConversionClampsOnlyAtDisplay() { Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.State,"SystemState_ThargoidStronghold",out var stronghold)); Check.Equal(100f,stronghold.R);Check.Equal(new StarColour(255,0,0),stronghold.DisplayColour()); Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.State,"Frontline",out var frontline));Check.Equal(2f,frontline.G); Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Government,"Carrier",out var carrier));Check.Equal(new StarColour(255,0,81),carrier.DisplayColour()); Check.That(!GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Government,"Megaconstruction",out _)); } [Test] public void MapGroupsUseTheOriginalGroupedPaletteRatherThanThePhysicalSpectralPalette() { var map=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.StarClass}; Check.Equal(new StarColour(0,0,255),map.GetColour(Star("O"))); Check.Equal(new StarColour(93,103,239),map.GetColour(Star("DAB"))); Check.Equal(map.GetColour(Star("W")),map.GetColour(Star("WO"))); Check.Equal(map.GetColour(Star("C")),map.GetColour(Star("CHd"))); Check.Equal(new StarColour(100,100,100),map.GetColour(Star("N"))); Check.Equal(map.GetColour(Star("N")),map.GetColour(Star("SupermassiveBlackHole"))); Check.Equal(map.GetColour(Star("A")),map.GetColour(Star("A_BlueWhiteSuperGiant"))); Check.That(map.GetColour(Star("O"))!=(map with{Mode=GalaxyMapMode.Realistic}).GetColour(Star("O"))); } [Test] public void OriginalPopulationEndpointsAreLinearInAbsolutePeopleAndSizeIsIndependent() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Population,SizeCategory=GalaxyFilterCategory.Population,PopulationMinimum=100,PopulationMaximum=1100}; var star=Star() with{Data=new(){Population=100}}; Check.Equal(new StarColour(18,43,66),filter.GetColour(star));Check.Equal(.3f,filter.RelativeSize(star)); Check.Equal(new StarColour(135,237,66),filter.GetColour(star with{Data=new(){Population=1100}}));Check.Equal(2f,filter.RelativeSize(star with{Data=new(){Population=1100}})); Check.Equal(.5,filter.PopulationFraction(600));Check.That(Math.Abs(filter.RelativeSize(star with{Data=new(){Population=600}})-1.15f)<.00001f); Check.That(!filter.Matches(star with{Data=new(){Population=99}}));Check.Equal(0f,filter.RelativeSize(star with{Data=new(){Population=99}})); Check.Equal(.7f,(filter with{SizeCategory=GalaxyFilterCategory.None}).RelativeSize(star)); Check.Equal(1f,(filter with{Mode=GalaxyMapMode.Realistic}).RelativeSize(star)); Check.Equal(0d,(filter with{PopulationMinimum=100,PopulationMaximum=100}).PopulationFraction(100)); } [Test] public void ColonyColoursRequireActualOwnershipAndDoNotTreatGroupNumbersAsPaletteIndices() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Colonisation,Category=GalaxyFilterCategory.Colonisation}; GalacticSystem Colony(int code,bool? owned)=>Star() with{Data=new(){OwnedColony=owned,NativeFilterFacts=new("F1",123,42,ColonisationStatus:code) {ColonisationOwnership=owned is{} known?new(100,known?100UL:101UL,2):null}}}; Check.Equal(new StarColour(255,242,38),filter.GetColour(Colony(1,true))); Check.Equal(new StarColour(255,26,230),filter.GetColour(Colony(1,false))); Check.Equal(new StarColour(204,204,204),filter.GetColour(Colony(1,null))); Check.Equal(new StarColour(255,26,26),filter.GetColour(Colony(5,null))); Check.Equal(.35f,filter.GetOpacity(Colony(5,null)));Check.Equal(1f,filter.GetOpacity(Colony(7,null))); Check.Equal(new StarColour(204,204,204),filter.GetColour(Colony(7,null))); Check.Equal(filter.GetColour(Colony(1,true)),filter.GetColour(Colony(3,true))); var ownOnly=filter with{Values=new HashSet{"localplayerclaimed"},IncludeUnknown=true}; Check.That(ownOnly.Matches(Colony(1,true))&&!ownOnly.Matches(Colony(1,false))&&!ownOnly.IsUnknown(Colony(1,false))); Check.That(!ownOnly.Evaluate(Colony(1,false)).Matches&&!ownOnly.Evaluate(Colony(1,false)).Unknown); // Eligible raw status alone is not proof that the original special green branch ran. Check.Equal(new StarColour(204,204,204),filter.GetColour(Colony(0,null))); foreach(var owner in new[]{true,false}) { var source=Colony(1,owner).Data;var json=System.Text.Json.JsonSerializer.Serialize(source);var restored=System.Text.Json.JsonSerializer.Deserialize(json)!; Check.That(restored.OwnedColony is null&&restored.NativeFilterFacts is null); } Check.That(System.Text.Json.JsonSerializer.Deserialize("""{"AccountFid":"F1","OwnedColony":true}""")!.OwnedColony is null); } [Test] public void MarkerLookupPreservesTheTargetStarsSourceColourInsteadOfTintingEveryEngineerPink() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Markers,Values=new HashSet{"engineer"}}; var actual=Star() with{OriginalAppearance=new(0xff112233,0xff445566,null,0,0,1,1,false)}; Check.Equal(new StarColour(102,85,68),filter.GetColour(actual)); Check.Equal(filter.GetColour(actual),(filter with{Values=new HashSet{"bookmark"}}).GetColour(actual)); Check.Equal(StellarAppearance.Palette[StellarAppearance.ColourIndex("G")],filter.GetColour(Star())); } [Test] public void OriginalServicePaletteFollowsTheActualSelectionRatherThanTheFirstUnrelatedStationService() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Services,Values=new HashSet{"materialtradermanufactured"}}; var system=Star() with{Data=new(){Services=["Repair","MaterialTraderManufactured"]}}; Check.That(filter.Matches(system));Check.Equal(new StarColour(0,64,255),filter.GetColour(system)); Check.Equal(new StarColour(255,0,255),(filter with{Values=new HashSet{"materialtraderxeno"}}).ColourForValue("materialtraderxeno")); Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Services,"modulepacks",out var administration));Check.Equal(1f,administration.A);Check.Equal(new StarColour(201,235,69),administration.DisplayColour()); Check.That(!GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Services,"Repair",out _)); } }