Skip to content

Commit

Permalink
[ADD] main class+ tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Corentin COUTRET-ROZET committed Jan 19, 2021
1 parent c47c640 commit f0b1907
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 3 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ TESTS = tests/


TESTS_SRC = $(TESTS)t_ArgumentManager.py \
$(TESTS)t_ReedPipes.py \
$(TESTS)t_Usage.py \


Expand Down
61 changes: 59 additions & 2 deletions sources/ReedPipes.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,69 @@ class ReedPipes():
"""

def __init__(self):
self._n = None
# Resolved linear system’s vector result
self._vector = [0.0, 0.0, 0.0, 0.0, 0.0]
# Radius (in cm) of pipe at the [0, 5, 10, 15, 20]cm abscissa
self._rs = []
# Number of points needed to display the radius
self._n = 0

def parse(self, argv: list) -> None:

self._rs = [float(arg) for arg in argv[1:6]]
self._n = int(argv[-1])

def compute(self) -> list:

def mean(maxi: int, total: int, index: int) -> float:
return maxi / total * index

def spline(imean: int, rs: list, vector: list) -> float:

ab = [x for x in range(0, 25, 5)]
i = int(imean/len(ab)) + 1 if imean != 20 else 4

return - vector[i-1]/30 * (imean - ab[i])**3\
+ vector[i]/30 * (imean - ab[i-1])**3\
- (rs[i-1]/5 - 5/6 * vector[i-1]) * (imean - ab[i])\
+ (rs[i]/5 - 5/6 * vector[i]) * (imean - ab[i-1])

data = []

A = 6 * (self._rs[2] - 2 * self._rs[1] + self._rs[0]) / 50
B = 6 * (self._rs[3] - 2 * self._rs[2] + self._rs[1]) / 50
C = 6 * (self._rs[4] - 2 * self._rs[3] + self._rs[2]) / 50
self._vector[2] = (B -(A + C) / 4) * 4 / 7
self._vector[3] = C / 2 - 0.25 * self._vector[2] ## SIMPLIFY
self._vector[1] = A / 2 - 0.25 * self._vector[2] ## SIMPLIFY

for i in range(self._n):
imean = mean(20, self._n-1, i) if i < self._n-1 else 20
data.append({'abscissa': imean,
'radius': spline(imean, self._rs, self._vector)})

return data

def printResult(self, data: list) -> None:

# Format in case of -0.0 to 0.0
self._vector = [-x if -0.1<x<0 else x for x in self._vector]
# Print resolved linear system’s vector result
print("vector result: [{:.1f}, {:.1f}, {:.1f}, {:.1f}, {:.1f}]".format(
self._vector[0], self._vector[1], self._vector[2], self._vector[3], self._vector[4]
))
#
for i in range(self._n):
print("abscissa: {:.1f} cm\tradius: {:.1f} cm".format(
data[i]['abscissa'], data[i]['radius']
))

def run(self, argv: list) -> None:

"""
Run computations and process output printing.
"""

return
self.parse(argv)
data = self.compute()
self.printResult(data)
32 changes: 31 additions & 1 deletion tests/deps/expected.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,34 @@
\tr10\tradius (in cm) of pipe at the 10cm abscissa\n\
\tr15\tradius (in cm) of pipe at the 15cm abscissa\n\
\tr20\tradius (in cm) of pipe at the 20cm abscissa\n\
\tn\tnumber of points needed to display the radius\n"
\tn\tnumber of points needed to display the radius\n"

NORMAL_CASE_1 = "\
vector result: [0.0, 0.0, 0.0, 0.2, 0.0]\n\
abscissa: 0.0 cm\tradius: 1.5 cm\n\
abscissa: 2.0 cm\tradius: 1.7 cm\n\
abscissa: 4.0 cm\tradius: 1.9 cm\n\
abscissa: 6.0 cm\tradius: 2.1 cm\n\
abscissa: 8.0 cm\tradius: 2.1 cm\n\
abscissa: 10.0 cm\tradius: 2.0 cm\n\
abscissa: 12.0 cm\tradius: 1.8 cm\n\
abscissa: 14.0 cm\tradius: 1.8 cm\n\
abscissa: 16.0 cm\tradius: 2.4 cm\n\
abscissa: 18.0 cm\tradius: 3.5 cm\n\
abscissa: 20.0 cm\tradius: 5.0 cm\n"

NORMAL_CASE_2 = "\
vector result: [0.0, -0.2, 0.3, -0.1, 0.0]\n\
abscissa: 0.0 cm\tradius: 2.0 cm\n\
abscissa: 1.7 cm\tradius: 2.6 cm\n\
abscissa: 3.3 cm\tradius: 3.0 cm\n\
abscissa: 5.0 cm\tradius: 3.0 cm\n\
abscissa: 6.7 cm\tradius: 2.6 cm\n\
abscissa: 8.3 cm\tradius: 2.2 cm\n\
abscissa: 10.0 cm\tradius: 2.0 cm\n\
abscissa: 11.7 cm\tradius: 2.4 cm\n\
abscissa: 13.3 cm\tradius: 3.2 cm\n\
abscissa: 15.0 cm\tradius: 4.0 cm\n\
abscissa: 16.7 cm\tradius: 4.5 cm\n\
abscissa: 18.3 cm\tradius: 4.8 cm\n\
abscissa: 20.0 cm\tradius: 5.0 cm\n"
33 changes: 33 additions & 0 deletions tests/t_ReedPipes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
############################################
# MATHEMATICS #
############################################
# #
# COUTRET-ROZET Corentin #
# #
# Project : 308reedpipes #
# #
############################################

import pytest

from sources.ReedPipes import ReedPipes
from tests.deps.expected import NORMAL_CASE_1, NORMAL_CASE_2

def test_normal_case_1(capsys):

argv = ['./308reedpipes', '1.5', '2', '2', '2', '5', '11']

r = ReedPipes().run(argv)
redir = capsys.readouterr()

assert redir.out == NORMAL_CASE_1


def test_normal_case_2(capsys):

argv = ['./308reedpipes', '2', '3', '2', '4', '5', '13']

r = ReedPipes().run(argv)
redir = capsys.readouterr()

assert redir.out == NORMAL_CASE_2

0 comments on commit f0b1907

Please sign in to comment.