using System.Numerics; using XFEEDToolBox.Core.Galaxy; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class GalaxyOriginalRgbaTests { private static GalacticSystem Star(GalaxySystemData? data=null)=>new("Source",new(0,0,0),StarClass:"G"){Data=data??new()}; [Test] public void ActualHdrStateAndPowerValuesReachTheFloatPathWithoutByteClipping() { var state=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.State}; Check.Equal(new Vector4(100,0,0,1),state.GetOriginalRgba(Star(new(){State="SystemState_ThargoidStronghold"}))!.Value); Check.Equal(new Vector4(.5f,2,.5f,1),state.GetOriginalRgba(Star(new(){State="Frontline"}))!.Value); var power=state with{Category=GalaxyFilterCategory.Power,OriginalPowerOptions=[new(0,1,7,"Actual Power",1.5f,.2f,.3f)]}; Check.Equal(new Vector4(1.5f,.2f,.3f,1),power.GetOriginalRgba(Star(new(){Power="Actual Power"}))!.Value); var territory=power with{Mode=GalaxyMapMode.Powerplay}; var actual=Star(new(){NativeFilterFacts=new("F1",42,100){PowerTerritory=new(territory.PowerTerritoryRequest!,null,new(1,4,7,5.775f,[1.5f,.2f,.3f],[2.53f,.03f,.07f],.15f))}}); Check.Equal(new Vector4(1.5f,.2f,.3f,1),territory.GetOriginalRgba(actual)!.Value); } [Test] public void PackedOriginalAlphaSurvivesAndMissingSourcesStayDistinctFromInvisibleSources() { var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Realistic}; var actual=Star() with{OriginalAppearance=new(0xff112233,0x80445566,null,0,0,1,1,false)}; Check.Equal(new Vector4(102/255f,85/255f,68/255f,128/255f),filter.GetOriginalRgba(actual)!.Value); Check.That(filter.GetOriginalRgba(Star()) is null); Check.Equal(0f,filter.GetOriginalRgba(actual with{OriginalAppearance=actual.OriginalAppearance! with{RealisticRgba=0x00445566}})!.Value.W); var tool=filter with{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Markers}; Check.Equal(filter.GetOriginalRgba(actual),tool.GetOriginalRgba(actual)); Check.That(tool.GetOriginalRgba(Star()) is null); Check.Equal(new Vector4(1,1,0,1),(tool with{Category=GalaxyFilterCategory.Economy}).GetOriginalRgba(Star(new(){Economy="Industrial"}))!.Value); Check.That((tool with{Category=GalaxyFilterCategory.Economy}).GetOriginalRgba(Star(new(){Economy="Carrier"})) is null); } [Test] public void SourcePaletteSelectionAndVisibilityAlphaAreAppliedExactlyOnce() { var service=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Services,Values=new HashSet{"materialtradermanufactured"}}; Check.Equal(new Vector4(0,.25f,1,1),service.GetOriginalRgba(Star(new(){Services=["Repair","MaterialTraderManufactured"]}))!.Value); Check.That((service with{Values=new HashSet{"repair"}}).GetOriginalRgba(Star(new(){Services=["Repair"]})) is null); var colony=service with{Mode=GalaxyMapMode.Colonisation,Category=GalaxyFilterCategory.Colonisation,Values=null}; var denied=Star(new(){NativeFilterFacts=new("F1",42,100,ColonisationStatus:5)}); var actual=colony.GetOriginalRgba(denied)!.Value; Check.Equal(new Vector4(1,.1f,.1f,.35f),actual); Check.Equal(GalaxyOriginalAppearance.Colonisation[1].G,colony.GetOriginalRgba(denied with{Data=denied.Data with{NativeFilterFacts=denied.Data.NativeFilterFacts! with{ColonisationStatus=1,ColonisationOwnership=new(100,100,2)},OwnedColony=true}})!.Value.Y); Check.That(colony.GetOriginalRgba(denied with{Data=denied.Data with{NativeFilterFacts=denied.Data.NativeFilterFacts! with{ColonisationStatus=1}}}) is null); Check.That(colony.GetOriginalRgba(denied with{Data=denied.Data with{NativeFilterFacts=denied.Data.NativeFilterFacts! with{ColonisationStatus=7},OwnedColony=true}}) is null); var population=service with{Category=GalaxyFilterCategory.Population,Values=null,PopulationMinimum=100,PopulationMaximum=1100}; Check.Equal(0f,population.GetOriginalRgba(Star(new(){Population=99}))!.Value.W); Check.Equal(1f,population.GetOriginalRgba(Star(new(){Population=100}))!.Value.W); var sized=service with{SizeCategory=GalaxyFilterCategory.Population,PopulationMinimum=100}; Check.Equal(0f,sized.GetOriginalRgba(Star(new(){Population=99,Services=["MaterialTraderManufactured"]}))!.Value.W); } }