summaryrefslogtreecommitdiff
path: root/testing-debugging/slides.org
diff options
context:
space:
mode:
Diffstat (limited to 'testing-debugging/slides.org')
-rw-r--r--testing-debugging/slides.org153
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