Ejemplo n.º 1
0
    public void FindFirstLeastSwag_ShoudlThrowAfterRemove()
    {
        //Arrange
        IArena     RA  = new RoyaleArena();
        Battlecard cd1 = new Battlecard(5, CardType.SPELL, "joro", 5, 1);
        Battlecard cd2 = new Battlecard(6, CardType.SPELL, "joro", 6, 5.5);
        Battlecard cd3 = new Battlecard(7, CardType.SPELL, "joro", 7, 5.5);
        Battlecard cd4 = new Battlecard(12, CardType.SPELL, "joro", 8, 15.6);
        Battlecard cd5 = new Battlecard(15, CardType.RANGED, "joro", 12, 7.8);

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        RA.RemoveById(5);
        RA.RemoveById(7);
        RA.RemoveById(6);
        RA.RemoveById(12);
        RA.RemoveById(15);
        //Assert
        Assert.Throws <InvalidOperationException>(() =>
        {
            RA.FindFirstLeastSwag(1);
        });
    }
Ejemplo n.º 2
0
    public void GetAllByNameAndSwag_ShouldWorkCorrectly_AfterRemove()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "pesho", 5, 14.8);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "pesho", 5, 14.9);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "maru", 5, 15.6);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "pesho", 5, 15.6);
        Battlecard        cd5      = new Battlecard(8, CardType.RANGED, "pesho", 5, 17.8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd2, cd3
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        RA.RemoveById(8);
        RA.RemoveById(3);
        //Assert
        List <Battlecard> actual = RA.GetAllByNameAndSwag().ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 3
0
    public void GetInSwagRange_ShouldReturn_CorrectBattlecards()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(5, CardType.SPELL, "dragon", 8, 1);
        Battlecard        cd2      = new Battlecard(6, CardType.SPELL, "raa", 7, 2);
        Battlecard        cd3      = new Battlecard(7, CardType.SPELL, "maga", 6, 5.5);
        Battlecard        cd4      = new Battlecard(12, CardType.SPELL, "shuba", 5, 15.6);
        Battlecard        cd5      = new Battlecard(15, CardType.SPELL, "tanuki", 5, 7.8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd5, cd4
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        List <Battlecard> actual = RA.GetAllInSwagRange(7, 16).ToList();

        //Assert
        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 4
0
    public IEnumerable <Battlecard> GetAllInSwagRange(double lo, double hi)
    {
        Battlecard low = new Battlecard(0, CardType.BUILDING, "lo", 0, lo);
        Battlecard hig = new Battlecard(0, CardType.BUILDING, "hig", 0, hi);

        return(this.bySwag.Range(low, true, hig, true));
    }
Ejemplo n.º 5
0
    public void GetAllInSwagRange()
    {
        IArena            ar   = new RoyaleArena();
        List <Battlecard> cds  = new List <Battlecard>();
        Random            rand = new Random();

        for (int i = 0; i < 100000; i++)
        {
            Battlecard cd = new Battlecard(i, CardType.SPELL,
                                           "player", 550, i);
            ar.Add(cd);
            cds.Add(cd);
        }
        cds = cds.OrderBy(x => x.Swag).ThenBy(x => x.Id).ToList();
        int count = ar.Count;

        Assert.AreEqual(100000, count);
        Stopwatch watch = new Stopwatch();

        watch.Start();

        for (int i = 0; i < 100; i++)
        {
            IEnumerable <Battlecard> all = ar.GetAllInSwagRange(200, 600);
        }
        watch.Stop();
        long l1 = watch.ElapsedMilliseconds;

        Assert.Less(l1, 150);
    }
Ejemplo n.º 6
0
 public void Add(Battlecard card)
 {
     if (!this.byID.ContainsKey(card.Id))
     {
         this.byID.Add(card.Id, card);
     }
 }
Ejemplo n.º 7
0
    public void GetByTypeAndDamageRange_ShouldReturnCorrectRange_CorrectlyOrdered()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "joro", 1, 5);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "joro", 1, 100);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "joro", 15.6, 53);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "joro", 15.6, 100);
        Battlecard        cd5      = new Battlecard(8, CardType.SPELL, "joro", 17.8, 102);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd5, cd4, cd3, cd2, cd1
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        //Assert
        List <Battlecard> actual = RA.GetByTypeAndDamageRangeOrderedByDamageThenById(CardType.SPELL, 0, 20).ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 8
0
    public void GetByCardType_ShouldReturnCorrectResultAfterRemove()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "valq", 2, 14.8);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "valq", 2, 14.8);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "valq", 4, 15.6);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "valq", 3, 15.6);
        Battlecard        cd5      = new Battlecard(8, CardType.RANGED, "valq", 8, 17.8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd3, cd2, cd1
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        RA.RemoveById(8);
        RA.RemoveById(3);
        //Assert
        List <Battlecard> actual = RA
                                   .GetByCardType(CardType.SPELL)
                                   .ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 9
0
    public void GetAllByNameAndSwag_ShouldWorkCorrectly_OnExistingName()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "valq", 5, 14.8);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "moro", 5, 14.8);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "boro", 5, 15.6);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "toro", 5, 15.6);
        Battlecard        cd5      = new Battlecard(8, CardType.RANGED, "toro", 6, 17.8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd1, cd2, cd3, cd5
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd2);
        RA.Add(cd3);
        RA.Add(cd4);
        RA.Add(cd5);
        //Assert
        List <Battlecard> actual = RA.GetAllByNameAndSwag().ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 10
0
    public void GetByTypeAndDamageRangeOrderedByDamageThenById_ShouldWorkCorrectly_On_CorrectRange()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(5, CardType.SPELL, "joro", 1, 5);
        Battlecard        cd2      = new Battlecard(6, CardType.SPELL, "joro", 5.5, 6);
        Battlecard        cd3      = new Battlecard(7, CardType.SPELL, "joro", 5.5, 7);
        Battlecard        cd4      = new Battlecard(12, CardType.SPELL, "joro", 15.6, 10);
        Battlecard        cd5      = new Battlecard(15, CardType.RANGED, "joro", 7.8, 6);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd4, cd2, cd3, cd1
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        //Assert
        List <Battlecard> actual = RA.GetByTypeAndDamageRangeOrderedByDamageThenById(CardType.SPELL, 0, 20).ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 11
0
 public void Add(Battlecard card)
 {
     this.byId[card.Id] = card;
     this.AddByType(card);
     this.AddByName(card);
     this.battlecards.Add(card);
 }
Ejemplo n.º 12
0
    public void GetByCardTypeAndMaximumDamage_ShouldWorkCorrectly()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "valq", 14, 5);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "valq", 14, 5);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "valq", 15, 6);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "valq", 15, 7);
        Battlecard        cd5      = new Battlecard(8, CardType.SPELL, "valq", 18, 8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd4, cd3, cd2, cd1
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        //Assert
        List <Battlecard> actual = RA
                                   .GetByCardTypeAndMaximumDamage(CardType.SPELL, 17)
                                   .ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 13
0
    public void GetByCardTypeAndMaximumDamage_ShouldWorkCorrectly_AfterRemove()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "valq", 14.8, 53);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "valq", 14.8, 5);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "valq", 15.6, 6);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "valq", 15.6, 12);
        Battlecard        cd5      = new Battlecard(8, CardType.RANGED, "valq", 17.8, 613);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd2
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        RA.RemoveById(cd1.Id);
        //Assert
        List <Battlecard> actual = RA
                                   .GetByCardTypeAndMaximumDamage(CardType.SPELL, 15.0)
                                   .ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 14
0
    public void RemoveById_ShoudlWorkFast()
    {
        IArena            ar   = new RoyaleArena();
        List <Battlecard> cds  = new List <Battlecard>();
        Random            rand = new Random();

        for (int i = 0; i < 40_000; i++)
        {
            int        amount = rand.Next(0, 60000);
            Battlecard cd     = new Battlecard(i, CardType.SPELL,
                                               i.ToString(), i, amount);
            ar.Add(cd);
            cds.Add(cd);
        }

        int count = ar.Count;

        Assert.AreEqual(40000, count);

        Stopwatch watch = new Stopwatch();

        watch.Start();

        foreach (Battlecard cd in cds)
        {
            ar.RemoveById(cd.Id);
        }

        watch.Stop();
        long l1 = watch.ElapsedMilliseconds;

        Assert.Less(l1, 300);
    }
Ejemplo n.º 15
0
    public void FindFirstLeastSwag_ShouldWorkCorrectly()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(5, CardType.SPELL, "joro", 6, 1);
        Battlecard        cd2      = new Battlecard(6, CardType.MELEE, "joro", 7, 5.5);
        Battlecard        cd3      = new Battlecard(7, CardType.SPELL, "joro", 11, 5.5);
        Battlecard        cd4      = new Battlecard(12, CardType.BUILDING, "joro", 12, 15.6);
        Battlecard        cd5      = new Battlecard(15, CardType.BUILDING, "moro", 13, 7.8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd1, cd2, cd3, cd5
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        List <Battlecard> actual = RA
                                   .FindFirstLeastSwag(4)
                                   .ToList();

        //Assert
        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 16
0
    public void GetAllInSwagRange_ShouldReturn_EmptyCollectionOnNonExistingRange()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(5, CardType.SPELL, "joro", 2, 1);
        Battlecard        cd2      = new Battlecard(6, CardType.SPELL, "joro", 3, 2);
        Battlecard        cd3      = new Battlecard(7, CardType.SPELL, "joro", 4, 5.5);
        Battlecard        cd4      = new Battlecard(12, CardType.SPELL, "joro", 5, 15.6);
        Battlecard        cd5      = new Battlecard(15, CardType.SPELL, "joro", 6, 7.8);
        List <Battlecard> expected = new List <Battlecard>();

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        List <Battlecard> actual = RA.GetAllInSwagRange(7.7, 7.75).ToList();

        //Assert
        CollectionAssert.AreEqual(expected, actual);
        RA.RemoveById(12);
        RA.RemoveById(15);
        actual = RA.GetAllInSwagRange(7.8, 16).ToList();
        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 17
0
    public void GetByName_ShouldWorkCorrectly()
    {
        //Arrange
        IArena            RA       = new RoyaleArena();
        Battlecard        cd1      = new Battlecard(2, CardType.SPELL, "joro", 5, 1);
        Battlecard        cd2      = new Battlecard(1, CardType.SPELL, "joro", 6, 1);
        Battlecard        cd3      = new Battlecard(4, CardType.SPELL, "joro", 7, 15.6);
        Battlecard        cd4      = new Battlecard(3, CardType.SPELL, "joro", 8, 15.6);
        Battlecard        cd5      = new Battlecard(8, CardType.RANGED, "joro", 11, 17.8);
        List <Battlecard> expected = new List <Battlecard>()
        {
            cd5, cd4, cd3, cd2, cd1
        };

        //Act
        RA.Add(cd1);
        RA.Add(cd3);
        RA.Add(cd2);
        RA.Add(cd4);
        RA.Add(cd5);
        //Assert
        List <Battlecard> actual = RA.GetByNameOrderedBySwagDescending("joro").ToList();

        CollectionAssert.AreEqual(expected, actual);
    }
Ejemplo n.º 18
0
    private void AddByType(Battlecard card)
    {
        if (!this.byType.ContainsKey(card.Type))
        {
            this.byType[card.Type] = new SortedSet <Battlecard>();
        }

        this.byType[card.Type].Add(card);
    }
Ejemplo n.º 19
0
    private void AddByName(Battlecard card)
    {
        if (!this.byName.ContainsKey(card.Name))
        {
            this.byName[card.Name] = new HashSet <Battlecard>();
        }

        this.byName[card.Name].Add(card);
    }
Ejemplo n.º 20
0
    public IEnumerable <Battlecard> GetAllInSwagRange(double lo, double hi)
    {
        var low   = new Battlecard(int.MinValue, CardType.MELEE, "", 1, lo);
        var high  = new Battlecard(int.MinValue, CardType.MELEE, "", 1, hi);
        var node1 = new LinkedListNode <Battlecard>(low);
        var node2 = new LinkedListNode <Battlecard>(high);

        return(this.bySwag.Range(node1, true, node2, true).Select(x => x.Value));
    }
Ejemplo n.º 21
0
    public void Add(Battlecard card)
    {
        byId.Add(card.Id, card);
        byInsertion.Add(card);
        if (!byName.ContainsKey(card.Name))
        {
            byName[card.Name] = new OrderedBag <Battlecard>();
        }

        byName[card.Name].Add(card);
    }
Ejemplo n.º 22
0
    public void GetByNameAndSwagRange_ShouldWorkFast()
    {
        IArena ar = new RoyaleArena();
        List <List <Battlecard> > cds    = new List <List <Battlecard> >();
        List <Tuple <int, int> >  ranges = new List <Tuple <int, int> >();
        Random rand = new Random();
        int    id   = 0;

        for (int i = 0; i < 100; i++)
        {
            Tuple <int, int> range = new Tuple <int, int>(rand.Next(100, 400), rand.Next(500, 1000));
            ranges.Add(range);
            List <Battlecard> cd = new List <Battlecard>();
            for (int j = 0; j < 100; j++)
            {
                int amount = rand.Next(range.Item1 + 1, range.Item2 - 1);
                id++;
                Battlecard card = new Battlecard(id, CardType.SPELL,
                                                 i.ToString(), i, amount);
                cd.Add(card);
                ar.Add(card);
            }
            cds.Add(cd.OrderByDescending(x => x.Swag).ThenBy(x => x.Id).ToList());
        }

        int count = ar.Count;

        Assert.AreEqual(10000, count);
        Stopwatch watch = new Stopwatch();

        watch.Start();

        List <IEnumerable <Battlecard> > results = new List <IEnumerable <Battlecard> >();

        for (int i = 0; i < 100; i++)
        {
            Tuple <int, int>         range = ranges[i];
            IEnumerable <Battlecard> all   = ar.GetByNameAndSwagRange(i.ToString(), range.Item1, range.Item2);
            results.Add(all);
        }
        watch.Stop();
        int c = 0;

        for (int i = 0; i < 100; i++)
        {
            CollectionAssert.AreEqual(cds[i], results[i].ToList());
            c++;
        }

        long l1 = watch.ElapsedMilliseconds;

        Assert.Less(l1, 150);
        Assert.AreEqual(cds.Count, c);
    }
Ejemplo n.º 23
0
    public IEnumerable <Battlecard> GetByTypeAndDamageRangeOrderedByDamageThenById(CardType type, int lo, int hi)
    {
        if (this.byType[type].Count == 0)
        {
            throw new InvalidOperationException();
        }

        Battlecard low = new Battlecard(0, CardType.BUILDING, "lo", lo, 0);
        Battlecard hig = new Battlecard(0, CardType.BUILDING, "hig", hi, 0);

        return(this.byType[type].Range(hig, false, low, false));
    }
Ejemplo n.º 24
0
    public void Add(Battlecard card)
    {
        byId[card.Id] = card;
        battlecards.Add(card);

        if (!byName.ContainsKey(card.Name))
        {
            byName[card.Name] = new HashSet <Battlecard>();
        }

        byName[card.Name].Add(card);
    }
Ejemplo n.º 25
0
    public IEnumerable <Battlecard> GetByCardTypeAndMaximumDamage(CardType type, double damage)
    {
        if (!this.byType[type].Any())
        {
            throw new InvalidOperationException();
        }

        var card = new Battlecard(int.MinValue, type, "", damage, 0);
        var node = new LinkedListNode <Battlecard>(card);

        return(this.byType[type].RangeFrom(node, true).Select(x => x.Value));
    }
Ejemplo n.º 26
0
    public IEnumerable <Battlecard> GetByNameAndSwagRange(string name, double lo, double hi)
    {
        Battlecard low = new Battlecard(0, CardType.BUILDING, "lo", 0, lo);
        Battlecard hig = new Battlecard(0, CardType.BUILDING, "hig", 0, hi - 1);

        if (this.byNameAndSwag[name].Count == 0)
        {
            throw new InvalidOperationException();
        }

        return(this.byNameAndSwag[name].Range(hig, true, low, true));
    }
Ejemplo n.º 27
0
    public void GetAllByNameAndSwag_ShouldWorkFast()
    {
        IArena ar = new RoyaleArena();
        Dictionary <string, Battlecard> max = new Dictionary <string, Battlecard>();

        CardType[] statuses = new CardType[]
        {
            CardType.MELEE,
            CardType.RANGED,
            CardType.SPELL,
            CardType.BUILDING
        };
        Random    rand = new Random();
        Stopwatch sw   = new Stopwatch();

        for (int i = 0; i < 100000; i++)
        {
            int        status = rand.Next(0, 4);
            string     name   = rand.Next(0, 200).ToString();
            CardType   TS     = statuses[status];
            Battlecard cd     = new Battlecard(i, TS,
                                               name, i, i);

            if (!max.ContainsKey(name))
            {
                max.Add(name, cd);
            }
            if (max[name].Swag <= cd.Swag)
            {
                max[name] = cd;
            }

            ar.Add(cd);
        }
        int count = ar.Count;

        Assert.AreEqual(100000, count);
        Stopwatch watch = new Stopwatch();

        watch.Start();
        for (int i = 0; i < 10; i++)
        {
            IEnumerable <Battlecard> all = ar.GetAllByNameAndSwag();
            foreach (var item in all)
            {
                Assert.AreSame(max[item.Name], item);
            }
        }
        watch.Stop();
        long l1 = watch.ElapsedMilliseconds;

        Assert.Less(l1, 150);
    }
Ejemplo n.º 28
0
    public void RemoveById(int id)
    {
        if (!byId.ContainsKey(id))
        {
            throw new InvalidOperationException();
        }

        Battlecard card = byId[id];

        byId.Remove(id);
        byInsertion.Remove(card);
        byName[card.Name].Remove(card);
    }
Ejemplo n.º 29
0
    public IEnumerable <Battlecard> GetByTypeAndDamageRangeOrderedByDamageThenById(CardType type, int lo, int hi)
    {
        if (!this.byType[type].Any())
        {
            throw new InvalidOperationException();
        }

        var low   = new Battlecard(int.MinValue, type, "", lo, 0);
        var high  = new Battlecard(int.MinValue, type, "", hi, 0);
        var node1 = new LinkedListNode <Battlecard>(low);
        var node2 = new LinkedListNode <Battlecard>(high);

        return(this.byType[type].Range(node2, false, node1, false).Select(x => x.Value));
    }
Ejemplo n.º 30
0
    public IEnumerable <Battlecard> GetByNameAndSwagRange(string name, double lo, double hi)
    {
        if (!this.byName.ContainsKey(name))
        {
            throw new InvalidOperationException();
        }

        var low   = new Battlecard(int.MinValue, CardType.MELEE, "", 1, lo);
        var high  = new Battlecard(int.MinValue, CardType.MELEE, "", 1, hi);
        var node1 = new LinkedListNode <Battlecard>(low);
        var node2 = new LinkedListNode <Battlecard>(high);

        return(this.byName[name].Range(node2, false, node1, true).Select(x => x.Value));
    }