public void Should_Be_Able_To_Store_Different_Values()
        {
            short expectedSize = 4;
            short expectedCount = 4;

            StoredColors colors = new StoredColors();
            colors.Add(100);
            colors.Add(200);
            colors.Add(300);
            colors.Add(400);

            Assert.AreEqual(expectedSize, colors.Count);
        }
        public void Should_Be_Able_To_Store_Same_Value()
        {
            short expectedSize = 1;
            short expectedCount = 4;

            StoredColors colors = new StoredColors();
            colors.Add(100);
            colors.Add(100);
            colors.Add(100);
            colors.Add(100);

            Assert.AreEqual(expectedSize, colors.Count);
            Assert.AreEqual(expectedCount, colors[100]);
        }
        public bool Traverse()
        {
            if (adjacencyList == null)
            {
                throw new ArgumentException("Missing initialization arguments");
            }

            markedVertices = new bool[adjacencyList.Count + 1];
            List<int> adjacentWithRootColor = new List<int>();
            StoredColors storedColors = new StoredColors();
            int head = 1;
            traversalQueue.Enqueue(head);
            markedVertices[head] = true;

            short headColor = verticesColoring[head];
            adjacentWithRootColor.Add(head);

            while (traversalQueue.Any())
            {
                int node = traversalQueue.Dequeue();
                Console.WriteLine(node);

                foreach (int tail in adjacencyList[node])
                {
                    if (markedVertices[tail])
                        continue;

                    // if tail has diff color add it to counter
                    if (verticesColoring[tail] != headColor)
                    {
                        storedColors.Add(verticesColoring[tail]);
                        markedVertices[tail] = true; // it's probably redundant, but in time pressure conditions I'd like to have it there. TODO check
                        continue;
                    }

                    // if tail has same color, then store it for recoloring and continue traversal
                    adjacentWithRootColor.Add(tail);
                    markedVertices[tail] = true;
                    traversalQueue.Enqueue(tail);
                }
            }

            // short winnerColor = storedColors.First(x => x.Value == storedColors.Values.Max()).Key;

            var winnerColor = storedColors.FirstOrDefault(x => x.Value == storedColors.Values.Max());
            if (winnerColor.Equals(default(KeyValuePair<short, int>)))
            {
                return true;
            }

            Console.WriteLine("And the winner color is: {0}", winnerColor.Key);

            // recolor vertices
            foreach (int vertice in adjacentWithRootColor)
            {
                verticesColoring[vertice] = winnerColor.Key;
            }

            return false;
        }
        public void Should_Be_Able_To_Store_Value()
        {
            short expected = 1;

            StoredColors colors = new StoredColors();
            colors.Add(100);

            Assert.AreEqual(expected, colors.Count);
        }
 public void Should_Not_Be_Able_To_Use_Add()
 {
     StoredColors colors = new StoredColors();
     colors.Add(100, 100);
 }