private ProcessSimulatedMonthResponse ProcessPeople(List <Person> peopleToProcess)
        {
            var processResponse = new ProcessSimulatedMonthResponse();
            var unmarriedPeople = peopleToProcess.Where(p => p.AgeType == AgeType.Adult && p.Spouse == null).ToList();

            foreach (var person in peopleToProcess)
            {
                ProcessPerson(person, processResponse, unmarriedPeople);
            }
            return(processResponse);
        }
        private void ProcessPerson(Person person, ProcessSimulatedMonthResponse processResponse, ICollection <Person> unmarriedPeople)
        {
            person.Age = IncrementPersonAgeOneMonth(person.Age);
            if (KillPersonOnRandomChance(person, new Odds(Random, 1, 1000)))
            {
                person.IsAlive = false;
                processResponse.DeadPeople.Add(person);
            }
            var newCouple = MarryPersonOnRandomChance(unmarriedPeople, person, new Odds(Random, 2, 10));

            if (newCouple != null)
            {
                processResponse.NewCouples.Add(newCouple);
            }
            if (BirthOccursWhenPregnancyIsDue(person))
            {
                processResponse.NewMothers.Push(person);
            }
            AdvancePregnancyByOneMonth(person);
            if (PregnancyOccursOnRandomChanceForMarriedWomen(person, new Odds(Random, 3, 100)))
            {
                person.IsPregnant = true;
            }
        }