diff options
Diffstat (limited to 'testing-debugging/slides.org')
-rw-r--r-- | testing-debugging/slides.org | 153 |
1 files changed, 138 insertions, 15 deletions
diff --git a/testing-debugging/slides.org b/testing-debugging/slides.org index 0e56fe3..23dc2f4 100644 --- a/testing-debugging/slides.org +++ b/testing-debugging/slides.org @@ -36,23 +36,18 @@ - Need for coding style and some of the standards followed by the Python Community. - Handling Errors and Exceptions. - * gcd function - Create gcd.py file with: -#+begin_LaTeX -\begin{lstlisting}[language=python] +#+begin_src python def gcd(a, b): if a % b == 0: return b return gcd(b, a%b) -\end{lstlisting} -#+end_LaTeX +#+end_src python * Test for gcd.py - Edit gcd.py file -#+begin_LaTeX -\begin{lstlisting}[language=python] - +#+begin_src python def gcd(a, b): if b == 0: return a @@ -63,13 +58,11 @@ if result != 16: print "Test failed" print "Test Passed" -\end{lstlisting} -#+end_LaTeX -* Automating tests -#+begin_LaTeX -\begin{lstlisting}[language=python] +#+end_src +* Automating tests +#+begin_src python if __name=__='__main__': for line in open('numbers.txt'): numbers = line.split() @@ -79,8 +72,138 @@ if gcd(x, y) != result: print "Failed gcd test for", x, y -\end{lstlisting} -#+end_LaTeX +#+end_src +* Question 1 + For the same inputs as gcd write automated tests for LCM. +* Solution 1 +#+begin_src python + def gcd(a, b): + if a % b == 0: + return b + return gcd(b, a%b) + + def lcm(a, b): + return (a * b) / gcd(a, b) + + if __name__ == '__main__': + for line in open('lcmtestcases.txt'): + numbers = line.split() + x = int(numbers[0]) + y = int(numbers[1]) + result = int(numbers[2]) + if lcm(x, y) != result: + print "Failed lcm test for", x, y + +#+end_src + +* Meaning full names +#+begin_src python + + amount = 12.68 + denom = 0.05 + nCoins = round(amount / denom) + rAmount = nCoins * denom + +#+end_src + +* Code style + - Four Space Indentation + - 79 character limit on a line + - Funtions should be seperated by + blank line + - Use Docstring + - White space around operators + - l = 32 % 4 + +* Question 2 + - Give meaningful names to the variables in following + code + + - c = a / b + +* Solution 2 +#+begin_src python + + quotient = dividend / divisor + +#+end_src + +* Code Snippet +#+begin_src python + + while True print 'Hello world' + +#+end_src + +* Error +#+begin_latex +\begin{lstlisting} + while True print 'Hello world' + \end{lstlisting} + \begin{lstlisting} + File "<stdin>", line 1, in ? + while True print 'Hello world' +SyntaxError: invalid syntax +\end{lstlisting} +#+end_latex + +* Code Snippet +#+begin_src python + a = raw_input("Enter a number") + try: + num = int(a) + except: + print "Wrong input ..." + +#+end_src + +* Using idb +#+begin_latex +\small +\begin{lstlisting} +In []: import mymodule +In []: mymodule.test() +--------------------------------------------- +NameError Traceback (most recent call last) +<ipython console> in <module>() +mymodule.py in test() + 1 def test(): + 2 total=1+1 +----> 3 print spam +NameError: global name 'spam' is not defined + +In []: %debug +> mymodule.py(2)test() + 0 print spam +ipdb> total +2 +\end{lstlisting} +#+end_latex + + + +* Summary + - Create simple tests for a function. + - Learn to Automate tests using many predefined test cases. + - Good coding standards. + - Difference between syntax error and exception. + - Handling exception using try and except. + - Using %debug for debugging on ipython. + +* Thank you! +#+begin_latex + \begin{block}{} + \begin{center} + This spoken tutorial has been produced by the + \textcolor{blue}{FOSSEE} team, which is funded by the + \end{center} + \begin{center} + \textcolor{blue}{National Mission on Education through \\ + Information \& Communication Technology \\ + MHRD, Govt. of India}. + \end{center} + \end{block} +#+end_latex |