48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
"""Test the pi models."""
|
|
from unittest import mock
|
|
|
|
from django.test import TestCase
|
|
from django.utils.timezone import now
|
|
|
|
from pi.models import PiLog
|
|
|
|
|
|
class PiLogTest(TestCase):
|
|
"""Test pi models."""
|
|
|
|
def test_hit_calculation(self):
|
|
"""Test that x,y combinations are properly considered inside or outside the circle."""
|
|
hit_item = PiLog(simulation_x=0.0, simulation_y=0.0, total_count=0, total_count_inside=0)
|
|
miss_item = PiLog(simulation_x=1.0, simulation_y=1.0, total_count=0, total_count_inside=0)
|
|
|
|
self.assertTrue(hit_item.hit)
|
|
self.assertFalse(miss_item.hit)
|
|
|
|
def test_value_calculation(self):
|
|
"""Test that a simulation's value of pi can be calculated."""
|
|
item = PiLog(simulation_x=0.0, simulation_y=0.0, total_count=1000, total_count_inside=788)
|
|
zero_item = PiLog(simulation_x=0.0, simulation_y=0.0, total_count=0, total_count_inside=0)
|
|
|
|
self.assertEqual(item.value, 3.152)
|
|
self.assertEqual(zero_item.value, 0.0)
|
|
|
|
def test_string_repr(self):
|
|
"""Test the string repr of a simulation log entry."""
|
|
item = PiLog(simulation_x=0.0, simulation_y=0.0, total_count=1000, total_count_inside=788,
|
|
created=now())
|
|
|
|
self.assertIn("(788/1000) @ ", str(item))
|
|
|
|
def test_simulation_inside_determination(self):
|
|
"""Test that running a simulation passes the proper inside value."""
|
|
# get at least one simulation in the DB
|
|
original_item, _, _ = PiLog.objects.simulate()
|
|
|
|
with mock.patch('random.random', return_value=1.0):
|
|
miss_item, _, _ = PiLog.objects.simulate()
|
|
self.assertEqual(miss_item.total_count_inside, original_item.total_count_inside)
|
|
|
|
with mock.patch('random.random', return_value=0.0):
|
|
hit_item, _, _ = PiLog.objects.simulate()
|
|
self.assertGreater(hit_item.total_count_inside, original_item.total_count_inside)
|