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<string>{"materialtradermanufactured"}};
Check.Equal(new Vector4(0,.25f,1,1),service.GetOriginalRgba(Star(new(){Services=["Repair","MaterialTraderManufactured"]}))!.Value);
Check.That((service with{Values=new HashSet<string>{"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);
}
}
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<string>{"materialtradermanufactured"}};
Check.Equal(new Vector4(0,.25f,1,1),service.GetOriginalRgba(Star(new(){Services=["Repair","MaterialTraderManufactured"]}))!.Value);
Check.That((service with{Values=new HashSet<string>{"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);
}
}