XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyCurrentTradeRoutesTests
{
    private static GalaxyCurrentTradeFlow Row(long from=42,long to=43,ushort token=1,string? name="Gold",float npc=.6f,float player=.2f,ulong stamp=1000)=>new(from,to,token,name,npc,player,stamp);
    private static GalaxyCurrentTradeFlowsSnapshot Snapshot(params GalaxyCurrentTradeFlow[] rows)=>new(true,1000,100,50,7,rows,rows.Count(r=>r.CommodityName is null));
    [Test] public void DirectionUsesSameTokenOppositeFlowButStrengthUsesGrossAndParentsAggregate()
    {
        var snapshot=Snapshot(Row(),Row(43,42,npc:.2f),Row(token:2,name:"Silver",npc:.3f));
        var routes=GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.Npc,null);
        Check.Equal(1,routes.Count);Check.Equal(42L,routes[0].FromSystemAddress);Check.Equal(43L,routes[0].ToSystemAddress);
        Check.Equal(.6f+.3f,routes[0].Amount);Check.Equal(2,routes[0].Contributions.Count);Check.Equal(0,routes[0].OriginalCategoryId);
        var selected=GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.Npc,new HashSet<string>{"gold"});
        Check.Equal(.6f,selected[0].Amount);Check.Equal(1,selected[0].Contributions.Count);
    }
    [Test] public void LatestZeroExpiryUnknownSymbolsAndEmptySelectionCannotKeepOldPositiveRoutes()
    {
        var snapshot=Snapshot(Row(stamp:900),Row(npc:0,player:0),Row(44,45,name:null),Row(46,47,name:"UnobservedOriginalDefinition"),Row(48,49,stamp:899));
        Check.Equal(0,GalaxyCurrentTradeRoutes.Select(snapshot,GalaxyTradeFlowSource.All,null).Count);
        Check.Equal(0,GalaxyCurrentTradeRoutes.Select(Snapshot(Row()),GalaxyTradeFlowSource.All,new HashSet<string>()).Count);
        Check.Equal(1,GalaxyCurrentTradeRoutes.Select(Snapshot(Row(stamp:900)),GalaxyTradeFlowSource.All,null).Count);
        Check.Equal(0,GalaxyCurrentTradeRoutes.Select(Snapshot(Row(stamp:1001)),GalaxyTradeFlowSource.All,null).Count);
        Check.Equal(0,GalaxyCurrentTradeRoutes.Select(Snapshot(Row()) with{Available=false},GalaxyTradeFlowSource.All,null).Count);
    }
    [Test] public void ActualTraderSourceAndStrongestFourPerOriginAreIndependent()
    {
        var rows=Enumerable.Range(1,5).Select(i=>Row(to:100+i,npc:i/10f,player:(6-i)/10f)).Append(Row(99,199)).ToArray();
        var npc=GalaxyCurrentTradeRoutes.Select(Snapshot(rows),GalaxyTradeFlowSource.Npc,null);
        var players=GalaxyCurrentTradeRoutes.Select(Snapshot(rows),GalaxyTradeFlowSource.Players,null);
        Check.Equal(5,npc.Count);Check.That(npc.Where(r=>r.FromSystemAddress==42).All(r=>r.ToSystemAddress!=101));
        Check.That(players.Where(r=>r.FromSystemAddress==42).All(r=>r.ToSystemAddress!=105));Check.That(npc.Any(r=>r.FromSystemAddress==99));
    }
    [Test] public void ExactOriginalSymbolsSupplyParentsAndProjectionRequiresBothActualAddresses()
    {
        var choices=GalaxyCurrentTradeRoutes.Choices([Row(),Row(token:2,name:"Silver"),Row(token:3,name:"UnknownOriginal"),Row(token:4,name:null)]);
        Check.Equal(2,choices.Count);Check.Equal("originaltrade:0",choices[0].Key);Check.Equal(2,choices[0].Children.Count);Check.That(!choices[1].OriginalCategory);
        var route=GalaxyCurrentTradeRoutes.Select(Snapshot(Row()),GalaxyTradeFlowSource.All,null);
        var systems=new Dictionary<long,GalacticSystem>{{42,new("From",new(0,0,0),42,"G")},{43,new("Wrong address",new(10,0,0),44,"K")}};
        var pending=GalaxyCurrentTradeRoutes.Project(route,systems);Check.Equal(0,pending.Flows.Count);Check.Equal(43L,pending.MissingSystemAddresses.Single());
        systems[43]=new("To",new(10,0,0),43,"K");var resolved=GalaxyCurrentTradeRoutes.Project(route,systems);
        Check.Equal(1,resolved.Flows.Count);Check.Equal(0,resolved.MissingSystemAddresses.Count);Check.Equal(43L,resolved.Flows[0].To.SystemAddress);
    }
}