# Random Number Tests

Testing code that includes random numbers can be hard.  Luckily, the random module comes with the `seed()` function.&#x20;

The `seed()` function allows you to initialize the random number generator with a specific value , which forces it to produce the same values each time.&#x20;

## Example 1 - Student Function

In this example, students are supposed to create a function named `make_random_numbers()` which returns a list of 10 random numbers between 20 and 99 inclusive.&#x20;

#### **Grading Tests:**

```python
import unittest
import random

class CodingRoomsUnitTests(unittest.TestCase):

    def test_case1(self):
        import example
        random.seed(10)
        self.assertListEqual([93, 24, 74, 81, 93, 21, 46, 79, 82, 55], example.make_random_numbers())

    def test_case2(self):
        import example
        random.seed(55)
        self.assertListEqual([31, 45, 39, 58, 30, 43, 58, 31, 65, 80], example.make_random_numbers() )
    
    def test_case3(self):
        import example
        random.seed(2)
        self.assertListEqual([27, 31, 30, 66, 41, 59, 52, 97, 47, 97], example.make_random_numbers())

if __name__ == '__main__':
    unittest.main()
```

Notice that `random.seed()` is called, setting the randomly generated numbers to predetermined values, before you check if the functions return value equals the expected value.&#x20;

#### Sample Solution:

{% code title="example.py" %}

```python
import random

def make_random_numbers():
    numbers_list = []
    for num in range(10):
        numbers_list.append(random.randint(20,99))
    return numbers_list
```

{% endcode %}

## Example 2 - Random Seed for random.randint()

Even better, we can randomly generate the seed and make the test random each time!

This example expects the student to use the `randint()` function to generate and print a random numbers between 0 and 500.

**Grading Tests:**

```python
import unittest
import sys, io
import random

stdout = sys.stdout

class CodingRoomsUnitTests(unittest.TestCase):

    def setUp(self):
        global stdout
        stdout = sys.stdout
        sys.stdout = io.StringIO()

    def tearDown(self):
        global stdout
        sys.stdout = stdout
        
    def test_default_case(self):
        s = random.randint(1, 55)
        
        random.seed(s)
        import main
        output = sys.stdout.getvalue()

        random.seed(s)
        num = random.randint(0, 500)

        answer = str(num)
        student = output
        
        self.assertEqual(answer, student)

if __name__ == '__main__':
    unittest.main()
```

**Sample Solution:**

{% code title="example.py" %}

```python
import random

random_num = random.randint(0,500)

print(random_num)
```

{% endcode %}

## Example 3 - Random Seed for random.choice()

Here is another where the student needed to print a random item from a list they created named `student_list`.

**Grading Tests:**

```python
import unittest
import sys, io
import random

stdout = sys.stdout

class CodingRoomsUnitTests(unittest.TestCase):

    def setUp(self):
        global stdout
        stdout = sys.stdout
        sys.stdout = io.StringIO()

    def tearDown(self):
        global stdout
        sys.stdout = stdout
        
    def test_default_case(self):
        s = random.randint(1, 55)
        
        random.seed(s)
        import example
        
        output = sys.stdout.getvalue().strip("\n")
        student = output

        random.seed(s)
        answer = random.choice(example.student_list)
        
        self.assertEqual(answer, student)

if __name__ == '__main__':
    unittest.main()
```

**Sample Solution:**

{% code title="example.py" %}

```python
import random

student_list = ["first thing", "second thing", "third thing", "fourth thing"]

random_thing = random.choice(student_list)

print(random_thing)
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://auto-grade.joemazzone.net/python/random-numbers-tests.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
