Repository: joke2k/faker

Issue:
name_female generates mixed names
* Faker version: Lastest
* OS: NA

Using `name_female` actually ends up generating mixed names, the same is true for `name_male`.

### Steps to reproduce
```python
from faker import Faker

fake = Faker("en-GB")

for i in range(1, 100):
    print(fake["en-GB"].name_female())
```
Example output:
```
...
Mr. Russell Morgan
Mr. Vincent Frost
Ruth Perry
Jacob Harris-Fitzgerald
Frances Robinson
Guy Hayward
Pamela Sanders-Davis
Frederick Doyle
Diana Hayes
Diane Hudson
Mr. Leonard Simpson
Mrs. Natalie Wilson
...
```
### Expected behavior

Generates only female names.

### Actual behavior

Generates mixed names.

This appears to be because `formats_female` is not defined, which then causes the function to fall back to a general format.

https://github.com/joke2k/faker/blob/7e78eef2565c5ce78b879bf271f520e817f55d4f/faker/providers/person/__init__.py#L230-L236



Discussion:
Feel free to submit a corresponding PR together with a verifying test for this.
I can work on this unless @constancepopovic is already assigned to it.

Resolving patch:
diff --git a/faker/providers/person/en_GB/__init__.py b/faker/providers/person/en_GB/__init__.py
--- a/faker/providers/person/en_GB/__init__.py
+++ b/faker/providers/person/en_GB/__init__.py
@@ -4,23 +4,29 @@
 
 
 class Provider(PersonProvider):
-    formats = (
-        "{{first_name_male}} {{last_name}}",
-        "{{first_name_male}} {{last_name}}",
-        "{{first_name_male}} {{last_name}}",
-        "{{first_name_male}} {{last_name}}",
-        "{{first_name_male}} {{last_name}}-{{last_name}}",
+
+    formats_female = (
         "{{first_name_female}} {{last_name}}",
         "{{first_name_female}} {{last_name}}",
         "{{first_name_female}} {{last_name}}",
         "{{first_name_female}} {{last_name}}",
         "{{first_name_female}} {{last_name}}-{{last_name}}",
-        "{{prefix_male}} {{first_name_male}} {{last_name}}",
         "{{prefix_female}} {{first_name_female}} {{last_name}}",
-        "{{prefix_male}} {{first_name_male}} {{last_name}}",
         "{{prefix_female}} {{first_name_female}} {{last_name}}",
     )
 
+    formats_male = (
+        "{{first_name_male}} {{last_name}}",
+        "{{first_name_male}} {{last_name}}",
+        "{{first_name_male}} {{last_name}}",
+        "{{first_name_male}} {{last_name}}",
+        "{{first_name_male}} {{last_name}}-{{last_name}}",
+        "{{prefix_male}} {{first_name_male}} {{last_name}}",
+        "{{prefix_male}} {{first_name_male}} {{last_name}}",
+    )
+
+    formats = formats_female + formats_male
+
     # Names from
     # http://webarchive.nationalarchives.gov.uk/20160105160709/http://ons.gov.uk/ons/publications/re-reference-tables.html?edition=tcm%3A77-243767
 


Test patch:
diff --git a/tests/providers/test_person.py b/tests/providers/test_person.py
--- a/tests/providers/test_person.py
+++ b/tests/providers/test_person.py
@@ -9,6 +9,7 @@
 from faker.providers.person.az_AZ import Provider as AzAzProvider
 from faker.providers.person.cs_CZ import Provider as CsCZProvider
 from faker.providers.person.en import Provider as EnProvider
+from faker.providers.person.en_GB import Provider as EnGBProvider
 from faker.providers.person.en_IE import Provider as EnIEProvider
 from faker.providers.person.en_IN import Provider as EnINProvider
 from faker.providers.person.en_US import Provider as EnUSProvider
@@ -860,6 +861,36 @@ def test_last_name(self):
         assert last_name in PtPtProvider.last_names
 
 
+class TestEnGB(unittest.TestCase):
+    def setUp(self):
+        self.fake = Faker("en_GB")
+        Faker.seed(0)
+
+    def test_first_name_female(self):
+        name = self.fake.first_name_female()
+        assert name in EnGBProvider.first_names_female
+
+    def test_first_name_male(self):
+        name = self.fake.first_name_male()
+        assert name in EnGBProvider.first_names_male
+
+    def test_name_female(self):
+        full_name = self.fake.name_female()
+        first_name = self.get_first_name_from_full_name(full_name)
+        assert first_name in EnGBProvider.first_names_female
+
+    def test_name_male(self):
+        full_name = self.fake.name_male()
+        first_name = self.get_first_name_from_full_name(full_name)
+        assert first_name in EnGBProvider.first_names_male
+
+    def get_first_name_from_full_name(self, full_name):
+        names = full_name.split(" ")
+        if len(names) == 2:
+            return names[0]
+        return names[1]
+
+
 class TestUs(unittest.TestCase):
     """Tests person in the en_US locale"""