testing-debugging/slides.org
changeset 487 cb3974daced5
parent 403 9858ca9e3f93
--- a/testing-debugging/slides.org	Thu Nov 11 23:44:59 2010 +0530
+++ b/testing-debugging/slides.org	Fri Nov 12 02:01:28 2010 +0530
@@ -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
+
+#+end_src
 
 * Automating tests
-#+begin_LaTeX
-\begin{lstlisting}[language=python]
-
+#+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_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
+#+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
+