Inheritance: INameData
        public void Configure_IncludeName_Specify_Data()
        {
            // Arrange
            var nameData = new NameData
                {
                    FirstNameData = new List<IFirstNameData>
                        {
                            new FirstNameData
                                {
                                    Gender = Gender.Female,
                                    Name = "Amy"
                                }
                        },
                    GenderFilter = GenderFilter.Female,
                    LastNameData = new List<string>
                        {
                            "Jackson"
                        }
                };

            // Act
            var generator = Generator.Configure()
                .IncludeName(nameData)
                .Build();

            // Assertfilter
            Assert.Equal(GenderFilter.Female, generator.Genders);
            Assert.True(generator.IncludeName);
            Assert.True(((Generator)generator).NameData.FirstNameData.Count() == 1);
            Assert.Equal(GenderFilter.Female, ((Generator)generator).NameData.GenderFilter);
            Assert.True(((Generator)generator).NameData.LastNameData.Count() == 1);
        }
        internal void LoadInternalNameData(GenderFilter genderFilter)
        {
            string line;

            var firstNames = new List<IFirstNameData>();
            var lastNames = new List<string>();

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EfficientlyLazy.IdentityGenerator.DataFiles.NamesFirst.data"))
            {
                if (stream == null)
                {
                    throw new InvalidOperationException("NamesFirst.data Embedded Resource Not Found");
                }

                using (var cr = new GZipStream(stream, CompressionMode.Decompress))
                {
                    using (var sr = new StreamReader(cr))
                    {
                        while ((line = sr.ReadLine()) != null)
                        {
                            var parts = line.Split('|');

                            switch (parts[1])
                            {
                                case "M": // Male
                                    firstNames.Add(new FirstNameData
                                    {
                                        Gender = Gender.Male,
                                        Name = parts[0]
                                    });
                                    break;
                                case "F": // Female
                                    firstNames.Add(new FirstNameData
                                    {
                                        Gender = Gender.Female,
                                        Name = parts[0]
                                    });
                                    break;
                                case "B": // Male or Female
                                    firstNames.Add(new FirstNameData
                                    {
                                        Gender = Gender.Male,
                                        Name = parts[0]
                                    });
                                    firstNames.Add(new FirstNameData
                                    {
                                        Gender = Gender.Female,
                                        Name = parts[0]
                                    });
                                    break;
                                default:
                                    throw new InvalidOperationException(string.Format("Invalid Line: '{0}'", line));
                            }
                        }
                    }
                }
            }

            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EfficientlyLazy.IdentityGenerator.DataFiles.NamesLast.data"))
            {
                if (stream == null)
                {
                    throw new InvalidOperationException("NamesLast.txt Embedded Resource Not Found");
                }

                using (var cr = new GZipStream(stream, CompressionMode.Decompress))
                {
                    using (var sr = new StreamReader(cr))
                    {
                        while ((line = sr.ReadLine()) != null)
                        {
                            lastNames.Add(line);
                        }
                    }
                }
            }

            NameData = new NameData
                {
                    FirstNameData = firstNames,
                    GenderFilter = genderFilter,
                    LastNameData = lastNames
                };
        }