public void GetDegrees_VerifyDegrees_FourLevels()
        {
            FBMember member = new FBMember();
              member.Name = "hi there";
              member.Email = "*****@*****.**";
              member.Friends = new List<FBMember>();

              member.Friends.Add(new FBMember() { Name = "hi there", Email = "*****@*****.**", Friends = new List<FBMember>() });
              member.Friends.Add(new FBMember() { Name = "hi there2", Email = "*****@*****.**", Friends = new List<FBMember>() });
              member.Friends.Add(new FBMember() { Name = "hi there3", Email = "*****@*****.**", Friends = new List<FBMember>() });

              member.Friends[0].Friends = new List<FBMember>() { new FBMember() { Name = "hi there4", Email = "*****@*****.**", Friends = new List<FBMember>() } };
              member.Friends[1].Friends = new List<FBMember>() { new FBMember() { Name = "hi there5", Email = "*****@*****.**", Friends = new List<FBMember>() } };
              member.Friends[2].Friends = new List<FBMember>() { new FBMember() { Name = "hi there6", Email = "*****@*****.**", Friends = new List<FBMember>() } };

              member.Friends[0].Friends[0].Friends = new List<FBMember>() { new FBMember() { Name = "hi there7", Email = "*****@*****.**", Friends = new List<FBMember>() } };
              member.Friends[1].Friends[0].Friends = new List<FBMember>() { new FBMember() { Name = "hi there8", Email = "*****@*****.**", Friends = new List<FBMember>() } };
              member.Friends[2].Friends[0].Friends = new List<FBMember>() { new FBMember() { Name = "hi there9", Email = "*****@*****.**", Friends = new List<FBMember>() } };
              var result = SimpleFBGraph.GetFriendDegrees(member);

              Assert.AreEqual(result[1][0].Email, "*****@*****.**");
              Assert.AreEqual(result[1][1].Email, "*****@*****.**");
              Assert.AreEqual(result[1][2].Email, "*****@*****.**");
              Assert.AreEqual(result[2][0].Email, "*****@*****.**");
              Assert.AreEqual(result[2][1].Email, "*****@*****.**");
              Assert.AreEqual(result[2][2].Email, "*****@*****.**");
              Assert.AreEqual(result[3][0].Email, "*****@*****.**");
              Assert.AreEqual(result[3][1].Email, "*****@*****.**");
              Assert.AreEqual(result[3][2].Email, "*****@*****.**");
        }
        public void GetDegrees_OneMember_ReturnsEmptyList()
        {
            FBMember member = new FBMember();
              member.Name = "hi there";
              member.Email = "*****@*****.**";
              member.Friends = new List<FBMember>();

              var result = SimpleFBGraph.GetFriendDegrees(member);

              Assert.AreEqual(null, result);
        }
        public static Dictionary<int, List<FBMember>> GetFriendDegrees(FBMember m)
        {
            Queue<FBMember> toVisitMembers = new Queue<FBMember>();
              Dictionary<int, List<FBMember>> degreeDict = new Dictionary<int, List<FBMember>>();
              Dictionary<string, int> visitedMembers = new Dictionary<string, int>();

              // visit all first level members
              // setting their degree and marking as visited
              foreach (FBMember member in m.Friends)
              {
            member.Degree = 1;
            toVisitMembers.Enqueue(member);
            visitedMembers.Add(member.Email, 1);
              }

              while (toVisitMembers.Count > 0)
              {
            FBMember currentFriend = toVisitMembers.Dequeue();

            if (!degreeDict.ContainsKey(currentFriend.Degree))
            {
              degreeDict[currentFriend.Degree] = new List<FBMember>() { currentFriend };
            }
            else
            {
              degreeDict[currentFriend.Degree].Add(currentFriend);
            }

            foreach (FBMember member in currentFriend.Friends)
            {
              if (!visitedMembers.ContainsKey(member.Email))
              {
            member.Degree = currentFriend.Degree + 1;
            toVisitMembers.Enqueue(member);
              }
            }
              }

              if (degreeDict.Count == 0)
              {
            return null;
              }
              else
              {
            return degreeDict;
              }
        }
        public void GetDegrees_VerifyDegrees_TwoLevels()
        {
            FBMember member = new FBMember();
              member.Name = "hi there";
              member.Email = "*****@*****.**";
              member.Friends = new List<FBMember>();

              member.Friends.Add(new FBMember() { Name = "hi there", Email = "*****@*****.**", Friends = new List<FBMember>() });
              member.Friends.Add(new FBMember() { Name = "hi there2", Email = "*****@*****.**", Friends = new List<FBMember>() });
              member.Friends.Add(new FBMember() { Name = "hi there3", Email = "*****@*****.**", Friends = new List<FBMember>() });

              var result = SimpleFBGraph.GetFriendDegrees(member);

              Assert.AreEqual(result[1][0].Email, "*****@*****.**");
              Assert.AreEqual(result[1][1].Email, "*****@*****.**");
              Assert.AreEqual(result[1][2].Email, "*****@*****.**");
        }