using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyOriginalSizeTests
{
private static GalacticSystem Star(int? colony=null)=>new("Measured",new(1,2,3),StarClass:"O")
{Data=new(){Population=600,NativeFilterFacts=colony is {} status?new("F1",42,7,ColonisationStatus:status):null}};
[Test] public void CurrentPanelDoesNotOfferAllSavedVisualisationIdentifiers()
{
Check.That(GalaxyOriginalSizeOptions.CurrentPanelCategories.SequenceEqual([GalaxyFilterCategory.None,GalaxyFilterCategory.Population]));
for(var id=0;id<16;id++)
{
var category=GalaxyOriginalSettings.CategoryForIndex(id)!.Value;
var option=GalaxyOriginalSizeOptions.ForCategory(category);Check.That(option is not null);
Check.Equal(id is 0 or 1,option!.Value.CurrentPanelOption);
}
Check.That(GalaxyOriginalSizeOptions.ForCategory(GalaxyFilterCategory.Markers) is null);
Check.That(GalaxyOriginalSizeOptions.ForCategory(GalaxyFilterCategory.PowerActivity) is null);
}
[Test] public void SavedClassifiedSizeChannelsUseTheActualConstantWithoutDependingOnCategoryFacts()
{
foreach(var id in new[]{2,3,4,5,6,7,8,10,11,12,14,15})
{
var category=GalaxyOriginalSettings.CategoryForIndex(id)!.Value;
var imported=GalaxyOriginalSettings.Parse($"<Root><RealisticView Value='1'/><ColourVisIndex Value='1'/><SizeVisIndex Value='{id}'/></Root>",new());
Check.Equal(category,imported.Filter.SizeCategory);
Check.Equal(GalaxyOriginalAppearance.DefaultSize,imported.Filter.SelectedOriginalSize(Star())!.Value);
Check.Equal(GalaxyOriginalAppearance.DefaultSize,imported.Filter.RelativeSize(Star() with{Data=new()}));
Check.That(imported.Limitations.All(l=>!l.Contains("公式尚未核验")));
}
}
[Test] public void ColonisationSizeUsesRawCandidateClassificationAndDoesNotGuessFromPublicLabels()
{
var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.None,SizeCategory=GalaxyFilterCategory.Colonisation};
Check.That(filter.IsQueryActive&&filter.RequestsOriginalColonisationSize);
for(var status=0;status<=15;status++)
Check.Equal(GalaxyOriginalAppearance.DefaultSize*(status is 5 or 6?GalaxyOriginalSizeOptions.ColonisationExcludedMultiplier:1),filter.SelectedOriginalSize(Star(status))!.Value);
Check.That(filter.SelectedOriginalSize(Star() with{Data=new(){Colonisation="excluded",OwnedColony=true}}) is null);
Check.That(filter.SelectedOriginalSize(Star(16)) is null);
Check.Equal(1f,(filter with{Mode=GalaxyMapMode.Realistic}).RelativeSize(Star(5)));
Check.That(!(filter with{Mode=GalaxyMapMode.Realistic}).RequestsOriginalColonisationSize);
}
[Test] public void PopulationAndCommoditySizesRemainIndependentOfTheColourSelection()
{
var population=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Security,SizeCategory=GalaxyFilterCategory.Population,PopulationMinimum=100,PopulationMaximum=1100};
Check.That(Math.Abs(population.SelectedOriginalSize(Star())!.Value-1.15f)<.00001f);
Check.Equal(0f,population.SelectedOriginalSize(Star() with{Data=new(){Population=99}})!.Value);
Check.That(population.SelectedOriginalSize(Star() with{Data=new()}) is null);
var commodity=population with{SizeCategory=GalaxyFilterCategory.Commodity};
Check.That(commodity.RequiresOriginalCommodity&&commodity.SelectedOriginalSize(Star()) is null);
Check.Equal(GalaxyOriginalAppearance.DefaultSize,commodity.RelativeSize(Star()));
}
}
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;
namespace XFEEDToolBox.Test;
[TestFixture]
public class GalaxyOriginalSizeTests
{
private static GalacticSystem Star(int? colony=null)=>new("Measured",new(1,2,3),StarClass:"O")
{Data=new(){Population=600,NativeFilterFacts=colony is {} status?new("F1",42,7,ColonisationStatus:status):null}};
[Test] public void CurrentPanelDoesNotOfferAllSavedVisualisationIdentifiers()
{
Check.That(GalaxyOriginalSizeOptions.CurrentPanelCategories.SequenceEqual([GalaxyFilterCategory.None,GalaxyFilterCategory.Population]));
for(var id=0;id<16;id++)
{
var category=GalaxyOriginalSettings.CategoryForIndex(id)!.Value;
var option=GalaxyOriginalSizeOptions.ForCategory(category);Check.That(option is not null);
Check.Equal(id is 0 or 1,option!.Value.CurrentPanelOption);
}
Check.That(GalaxyOriginalSizeOptions.ForCategory(GalaxyFilterCategory.Markers) is null);
Check.That(GalaxyOriginalSizeOptions.ForCategory(GalaxyFilterCategory.PowerActivity) is null);
}
[Test] public void SavedClassifiedSizeChannelsUseTheActualConstantWithoutDependingOnCategoryFacts()
{
foreach(var id in new[]{2,3,4,5,6,7,8,10,11,12,14,15})
{
var category=GalaxyOriginalSettings.CategoryForIndex(id)!.Value;
var imported=GalaxyOriginalSettings.Parse($"<Root><RealisticView Value='1'/><ColourVisIndex Value='1'/><SizeVisIndex Value='{id}'/></Root>",new());
Check.Equal(category,imported.Filter.SizeCategory);
Check.Equal(GalaxyOriginalAppearance.DefaultSize,imported.Filter.SelectedOriginalSize(Star())!.Value);
Check.Equal(GalaxyOriginalAppearance.DefaultSize,imported.Filter.RelativeSize(Star() with{Data=new()}));
Check.That(imported.Limitations.All(l=>!l.Contains("公式尚未核验")));
}
}
[Test] public void ColonisationSizeUsesRawCandidateClassificationAndDoesNotGuessFromPublicLabels()
{
var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.None,SizeCategory=GalaxyFilterCategory.Colonisation};
Check.That(filter.IsQueryActive&&filter.RequestsOriginalColonisationSize);
for(var status=0;status<=15;status++)
Check.Equal(GalaxyOriginalAppearance.DefaultSize*(status is 5 or 6?GalaxyOriginalSizeOptions.ColonisationExcludedMultiplier:1),filter.SelectedOriginalSize(Star(status))!.Value);
Check.That(filter.SelectedOriginalSize(Star() with{Data=new(){Colonisation="excluded",OwnedColony=true}}) is null);
Check.That(filter.SelectedOriginalSize(Star(16)) is null);
Check.Equal(1f,(filter with{Mode=GalaxyMapMode.Realistic}).RelativeSize(Star(5)));
Check.That(!(filter with{Mode=GalaxyMapMode.Realistic}).RequestsOriginalColonisationSize);
}
[Test] public void PopulationAndCommoditySizesRemainIndependentOfTheColourSelection()
{
var population=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Security,SizeCategory=GalaxyFilterCategory.Population,PopulationMinimum=100,PopulationMaximum=1100};
Check.That(Math.Abs(population.SelectedOriginalSize(Star())!.Value-1.15f)<.00001f);
Check.Equal(0f,population.SelectedOriginalSize(Star() with{Data=new(){Population=99}})!.Value);
Check.That(population.SelectedOriginalSize(Star() with{Data=new()}) is null);
var commodity=population with{SizeCategory=GalaxyFilterCategory.Commodity};
Check.That(commodity.RequiresOriginalCommodity&&commodity.SelectedOriginalSize(Star()) is null);
Check.Equal(GalaxyOriginalAppearance.DefaultSize,commodity.RelativeSize(Star()));
}
}