using System.Runtime.InteropServices;
using System.Text.Json;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyCommodityFilterWireSelfTest()
{
static JsonElement Parse(string json){using var doc=JsonDocument.Parse(json);return doc.RootElement.Clone();}
lock(galaxyFactsMutex)
{
var savedWork=galaxyFactsWork;var savedGeneration=galaxyFactsGeneration;
try
{
uint passed=0;galaxyFactsWork=new();galaxyFactsGeneration=0;
JsonElement Wire(string op,string fields)=>Parse(GalaxyFilterFactsRequest(op,Parse("{"+fields+"}")).ToJsonString());
JsonElement Page()=>Wire("galaxy.facts.result","\"generation\":"+galaxyFactsWork.generation);
void Cancel()=>Wire("galaxy.facts.cancel","\"generation\":"+galaxyFactsWork.generation);
string[] styleFields=["revision","category","opacity","size","sprite","rgba"];
Wire("galaxy.facts","\"systemAddresses\":[\"9007199254740993\"],\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":3");
galaxyFactsWork.items.Add((9007199254740993,default));var row=Page().GetProperty("items")[0];var commodity=row.GetProperty("commodity");
if(commodity.EnumerateObject().Count()==8&&commodity.GetProperty("commodityUid").GetUInt32()==0&&commodity.GetProperty("priceMode").GetInt32()==3&&
styleFields.All(k=>commodity.GetProperty(k).ValueKind==JsonValueKind.Null)&&row.GetProperty("systemAddress").GetString()=="9007199254740993"&&!galaxyFactsWork.includePowerStatus)passed|=1;
galaxyFactsWork.commodity[9007199254740993]=new(0,3,0,4,0,0,13,[100,1.5f,.25f,0]);
commodity=Page().GetProperty("items")[0].GetProperty("commodity");
if(commodity.GetProperty("revision").GetUInt32()==0&&commodity.GetProperty("category").GetInt32()==4&&commodity.GetProperty("opacity").GetSingle()==0&&
commodity.GetProperty("size").GetSingle()==0&&commodity.GetProperty("sprite").GetInt32()==13&&commodity.GetProperty("rgba")[0].GetSingle()==100&&commodity.GetProperty("rgba")[3].GetSingle()==0)passed|=2;
Cancel();Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":true,\"commodityUid\":4294967294,\"commodityPriceMode\":2");
galaxyFactsWork.items.Add((300,default));galaxyFactsWork.commodity[300]=new(uint.MaxValue-1,2,uint.MaxValue,3,.35f,.5f,11,[1,1,1,1]);
commodity=Page().GetProperty("items")[0].GetProperty("commodity");
if(commodity.GetProperty("commodityUid").GetUInt32()==uint.MaxValue-1&&commodity.GetProperty("priceMode").GetInt32()==2&&
commodity.GetProperty("revision").GetUInt32()==uint.MaxValue&&commodity.GetProperty("category").GetInt32()==3&&commodity.GetProperty("sprite").GetInt32()==11)passed|=4;
Cancel();Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":false,\"commodityUid\":null,\"commodityPriceMode\":null");
galaxyFactsWork.items.Add((300,default));
if(Page().GetProperty("items")[0].GetProperty("commodity").ValueKind==JsonValueKind.Null&&galaxyFactsWork.commodity.Count==0)passed|=8;
Cancel();var generation=galaxyFactsGeneration;var rejected=0;
string[] invalid=["\"includeCommodity\":1","\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":4",
"\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":-1","\"includeCommodity\":true,\"commodityUid\":4294967295,\"commodityPriceMode\":0",
"\"includeCommodity\":true,\"commodityUid\":-1,\"commodityPriceMode\":0","\"includeCommodity\":true,\"commodityUid\":\"1\",\"commodityPriceMode\":0",
"\"includeCommodity\":true,\"commodityUid\":0","\"includeCommodity\":true,\"commodityPriceMode\":0","\"commodityUid\":0","\"commodityPriceMode\":0"];
foreach(var fields in invalid)try{Wire("galaxy.facts","\"systemAddresses\":[\"300\"],"+fields);}catch(InvalidDataException){rejected++;}
if(rejected==invalid.Length&&galaxyFactsGeneration==generation)passed|=16;
Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":true,\"commodityUid\":1,\"commodityPriceMode\":0");var retired=galaxyFactsWork;Cancel();
Wire("galaxy.facts","\"systemAddresses\":[\"301\"],\"includeCommodity\":true,\"commodityUid\":2,\"commodityPriceMode\":1");
var stale=false;try{Wire("galaxy.facts.result","\"generation\":"+retired.generation);}catch(InvalidOperationException){stale=true;}
galaxyFactsWork.items.Add((301,default));galaxyFactsWork.commodity[301]=new(1,0,5,0,1,1,12,[1,1,1,1]);
commodity=Page().GetProperty("items")[0].GetProperty("commodity");
if(stale&&retired.cancelled&&styleFields.All(k=>commodity.GetProperty(k).ValueKind==JsonValueKind.Null)&&commodity.GetProperty("commodityUid").GetUInt32()==2)passed|=32;
var work=galaxyFactsWork;work.items.Clear();work.commodity.Clear();work.addresses=Enumerable.Range(1,180).Select(i=>9007199254740992UL+(ulong)i).ToArray();
work.includePowerStatus=true;work.includePowerOuter=true;work.includePowerTerritory=true;work.includePowerActivity=true;work.powerAllPowers=true;work.powerActivityId=5;work.territoryActivityEnabled=true;work.done=true;
foreach(var address in work.addresses)
{
work.items.Add((address,default));work.commodity[address]=new(2,1,uint.MaxValue,0,.35f,.5f,12,[100,1.5f,.25f,.35f]);
work.powerStatus[address]=new(2,5,1,17,uint.MaxValue,uint.MaxValue,true);
work.powerTerritory[address]=new(2,5,17,29.8375f,[.4f,.5f,1.5f],[.13286832f,.21404114f,2.5371552f],.15f);
work.powerOuter[address]=new(false,address,[12345.6789,-23456.789,34567.89],1000000);work.powerCounters[address]=2.5f;
}
var first=Page();var count=first.GetProperty("items").GetArrayLength();
if(count is >0 and <96&&System.Text.Encoding.UTF8.GetByteCount(first.GetRawText())<65535&&first.GetProperty("total").GetInt32()==180)passed|=64;
var addresses=new List<ulong>();var bounded=true;
while(addresses.Count<180)
{
var page=Wire("galaxy.facts.result","\"generation\":"+work.generation+",\"offset\":"+addresses.Count+",\"limit\":96");var rows=page.GetProperty("items");
if(rows.GetArrayLength()==0){bounded=false;break;}bounded&=System.Text.Encoding.UTF8.GetByteCount(page.GetRawText())<65535;
foreach(var item in rows.EnumerateArray())
{
addresses.Add(ulong.Parse(item.GetProperty("systemAddress").GetString()!));var style=item.GetProperty("commodity");
bounded&=style.GetProperty("commodityUid").GetUInt32()==2&&style.GetProperty("priceMode").GetInt32()==1&&style.GetProperty("rgba")[0].GetSingle()==100;
}
}
if(bounded&&addresses.SequenceEqual(work.addresses))passed|=128;
return passed;
}
finally{galaxyFactsWork=savedWork;galaxyFactsGeneration=savedGeneration;}
}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCommodityFilterWireSelfTest")]
internal static uint ExportGalaxyCommodityFilterWireSelfTest()=>RunTest(GalaxyCommodityFilterWireSelfTest);
#endif
}
using System.Runtime.InteropServices;
using System.Text.Json;
namespace XFEEDToolBox.Plugin;
internal static unsafe partial class Navigation
{
static uint GalaxyCommodityFilterWireSelfTest()
{
static JsonElement Parse(string json){using var doc=JsonDocument.Parse(json);return doc.RootElement.Clone();}
lock(galaxyFactsMutex)
{
var savedWork=galaxyFactsWork;var savedGeneration=galaxyFactsGeneration;
try
{
uint passed=0;galaxyFactsWork=new();galaxyFactsGeneration=0;
JsonElement Wire(string op,string fields)=>Parse(GalaxyFilterFactsRequest(op,Parse("{"+fields+"}")).ToJsonString());
JsonElement Page()=>Wire("galaxy.facts.result","\"generation\":"+galaxyFactsWork.generation);
void Cancel()=>Wire("galaxy.facts.cancel","\"generation\":"+galaxyFactsWork.generation);
string[] styleFields=["revision","category","opacity","size","sprite","rgba"];
Wire("galaxy.facts","\"systemAddresses\":[\"9007199254740993\"],\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":3");
galaxyFactsWork.items.Add((9007199254740993,default));var row=Page().GetProperty("items")[0];var commodity=row.GetProperty("commodity");
if(commodity.EnumerateObject().Count()==8&&commodity.GetProperty("commodityUid").GetUInt32()==0&&commodity.GetProperty("priceMode").GetInt32()==3&&
styleFields.All(k=>commodity.GetProperty(k).ValueKind==JsonValueKind.Null)&&row.GetProperty("systemAddress").GetString()=="9007199254740993"&&!galaxyFactsWork.includePowerStatus)passed|=1;
galaxyFactsWork.commodity[9007199254740993]=new(0,3,0,4,0,0,13,[100,1.5f,.25f,0]);
commodity=Page().GetProperty("items")[0].GetProperty("commodity");
if(commodity.GetProperty("revision").GetUInt32()==0&&commodity.GetProperty("category").GetInt32()==4&&commodity.GetProperty("opacity").GetSingle()==0&&
commodity.GetProperty("size").GetSingle()==0&&commodity.GetProperty("sprite").GetInt32()==13&&commodity.GetProperty("rgba")[0].GetSingle()==100&&commodity.GetProperty("rgba")[3].GetSingle()==0)passed|=2;
Cancel();Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":true,\"commodityUid\":4294967294,\"commodityPriceMode\":2");
galaxyFactsWork.items.Add((300,default));galaxyFactsWork.commodity[300]=new(uint.MaxValue-1,2,uint.MaxValue,3,.35f,.5f,11,[1,1,1,1]);
commodity=Page().GetProperty("items")[0].GetProperty("commodity");
if(commodity.GetProperty("commodityUid").GetUInt32()==uint.MaxValue-1&&commodity.GetProperty("priceMode").GetInt32()==2&&
commodity.GetProperty("revision").GetUInt32()==uint.MaxValue&&commodity.GetProperty("category").GetInt32()==3&&commodity.GetProperty("sprite").GetInt32()==11)passed|=4;
Cancel();Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":false,\"commodityUid\":null,\"commodityPriceMode\":null");
galaxyFactsWork.items.Add((300,default));
if(Page().GetProperty("items")[0].GetProperty("commodity").ValueKind==JsonValueKind.Null&&galaxyFactsWork.commodity.Count==0)passed|=8;
Cancel();var generation=galaxyFactsGeneration;var rejected=0;
string[] invalid=["\"includeCommodity\":1","\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":4",
"\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":-1","\"includeCommodity\":true,\"commodityUid\":4294967295,\"commodityPriceMode\":0",
"\"includeCommodity\":true,\"commodityUid\":-1,\"commodityPriceMode\":0","\"includeCommodity\":true,\"commodityUid\":\"1\",\"commodityPriceMode\":0",
"\"includeCommodity\":true,\"commodityUid\":0","\"includeCommodity\":true,\"commodityPriceMode\":0","\"commodityUid\":0","\"commodityPriceMode\":0"];
foreach(var fields in invalid)try{Wire("galaxy.facts","\"systemAddresses\":[\"300\"],"+fields);}catch(InvalidDataException){rejected++;}
if(rejected==invalid.Length&&galaxyFactsGeneration==generation)passed|=16;
Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":true,\"commodityUid\":1,\"commodityPriceMode\":0");var retired=galaxyFactsWork;Cancel();
Wire("galaxy.facts","\"systemAddresses\":[\"301\"],\"includeCommodity\":true,\"commodityUid\":2,\"commodityPriceMode\":1");
var stale=false;try{Wire("galaxy.facts.result","\"generation\":"+retired.generation);}catch(InvalidOperationException){stale=true;}
galaxyFactsWork.items.Add((301,default));galaxyFactsWork.commodity[301]=new(1,0,5,0,1,1,12,[1,1,1,1]);
commodity=Page().GetProperty("items")[0].GetProperty("commodity");
if(stale&&retired.cancelled&&styleFields.All(k=>commodity.GetProperty(k).ValueKind==JsonValueKind.Null)&&commodity.GetProperty("commodityUid").GetUInt32()==2)passed|=32;
var work=galaxyFactsWork;work.items.Clear();work.commodity.Clear();work.addresses=Enumerable.Range(1,180).Select(i=>9007199254740992UL+(ulong)i).ToArray();
work.includePowerStatus=true;work.includePowerOuter=true;work.includePowerTerritory=true;work.includePowerActivity=true;work.powerAllPowers=true;work.powerActivityId=5;work.territoryActivityEnabled=true;work.done=true;
foreach(var address in work.addresses)
{
work.items.Add((address,default));work.commodity[address]=new(2,1,uint.MaxValue,0,.35f,.5f,12,[100,1.5f,.25f,.35f]);
work.powerStatus[address]=new(2,5,1,17,uint.MaxValue,uint.MaxValue,true);
work.powerTerritory[address]=new(2,5,17,29.8375f,[.4f,.5f,1.5f],[.13286832f,.21404114f,2.5371552f],.15f);
work.powerOuter[address]=new(false,address,[12345.6789,-23456.789,34567.89],1000000);work.powerCounters[address]=2.5f;
}
var first=Page();var count=first.GetProperty("items").GetArrayLength();
if(count is >0 and <96&&System.Text.Encoding.UTF8.GetByteCount(first.GetRawText())<65535&&first.GetProperty("total").GetInt32()==180)passed|=64;
var addresses=new List<ulong>();var bounded=true;
while(addresses.Count<180)
{
var page=Wire("galaxy.facts.result","\"generation\":"+work.generation+",\"offset\":"+addresses.Count+",\"limit\":96");var rows=page.GetProperty("items");
if(rows.GetArrayLength()==0){bounded=false;break;}bounded&=System.Text.Encoding.UTF8.GetByteCount(page.GetRawText())<65535;
foreach(var item in rows.EnumerateArray())
{
addresses.Add(ulong.Parse(item.GetProperty("systemAddress").GetString()!));var style=item.GetProperty("commodity");
bounded&=style.GetProperty("commodityUid").GetUInt32()==2&&style.GetProperty("priceMode").GetInt32()==1&&style.GetProperty("rgba")[0].GetSingle()==100;
}
}
if(bounded&&addresses.SequenceEqual(work.addresses))passed|=128;
return passed;
}
finally{galaxyFactsWork=savedWork;galaxyFactsGeneration=savedGeneration;}
}
}
#if PLUGIN_NAVIGATION
[UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCommodityFilterWireSelfTest")]
internal static uint ExportGalaxyCommodityFilterWireSelfTest()=>RunTest(GalaxyCommodityFilterWireSelfTest);
#endif
}