From a3e5c61aba9df89897fab9c8efc04bdb89ce2034 Mon Sep 17 00:00:00 2001 From: Srikant Date: Tue, 24 Jan 2012 16:01:00 +0530 Subject: Added slides and script. Self evaluation questions are need to be added. --- TDD/getting_started_with_tdd/tdd1.tex | 304 +++++++++++++++++++++++++++ TDD/getting_started_with_tdd/tdd1_script.rst | 205 ++++++++++++++++++ 2 files changed, 509 insertions(+) create mode 100644 TDD/getting_started_with_tdd/tdd1.tex create mode 100755 TDD/getting_started_with_tdd/tdd1_script.rst (limited to 'TDD/getting_started_with_tdd') diff --git a/TDD/getting_started_with_tdd/tdd1.tex b/TDD/getting_started_with_tdd/tdd1.tex new file mode 100644 index 0000000..f056ce5 --- /dev/null +++ b/TDD/getting_started_with_tdd/tdd1.tex @@ -0,0 +1,304 @@ +\documentclass[12pt,presentation]{beamer} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{fixltx2e} +\usepackage{graphicx} +\usepackage{longtable} +\usepackage{float} +\usepackage{wrapfig} +\usepackage{soul} +\usepackage{textcomp} +\usepackage{marvosym} +\usepackage{wasysym} +\usepackage{latexsym} +\usepackage{amssymb} +\usepackage{hyperref} +\tolerance=1000 +\usepackage[english]{babel} \usepackage{ae,aecompl} +\usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet} +\usepackage{listings} +\lstset{language=Python, basicstyle=\ttfamily\bfseries, +commentstyle=\color{red}\itshape, stringstyle=\color{green}, +showstringspaces=false, keywordstyle=\color{blue}\bfseries} +\providecommand{\alert}[1]{\textbf{#1}} + +\title{SEES: Test Driven Development} +\author{FOSSEE} + +\usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +\begin{document} + +\begin{frame} +\begin{center} +\vspace{12pt} +\textcolor{blue}{\huge Test Driven Development \\Part I} +\end{center} +\vspace{18pt} +\begin{center} +\vspace{10pt} +\includegraphics[scale=0.95]{../images/fossee-logo.png}\\ +\vspace{5pt} +\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ +\scriptsize Funded by National Mission on Education through ICT\\ +\scriptsize MHRD,Govt. of India\\ +\includegraphics[scale=0.30]{../images/iitb-logo.png}\\ +\end{center} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Introduction} + +\begin{frame} + \frametitle{Objectives} + At the end of this tutorial, you will be able to, + \begin{itemize} + \item Know what is TDD. + \item Understand the use of test cases. + \item Write simple tests for a function. + + \end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame} +\frametitle{Pre-requisite} +\label{sec-3} + +Spoken tutorial on - +\begin{itemize} +\item Getting started with functions. +\end{itemize} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} + \frametitle{What is TDD?} + The basic steps of TDD are roughly as follows -- + \begin{enumerate} + \item Decide upon the feature to implement and the methodology of + testing it. + \item Write the tests for the feature decided upon. + \item Just write enough code, so that the test can be run, but it fails. + \item Improve the code, to just pass the test and at the same time + passing all previous tests. + \item Run the tests to see, that all of them run successfully. + \item Refactor the code you've just written -- optimize the algorithm, + remove duplication, add documentation, etc. + \item Run the tests again, to see that all the tests still pass. + + \end{enumerate} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{First Test} + +\begin{frame}[fragile] + \frametitle{First Test -- fibonacci} + \begin{itemize} + \item simple program -- Returns nth fibonacci number + \item What are our code units? + \begin{itemize} + \item Only one function \texttt{fibonacci} + \item Takes one number as argument + \item Returns one number, which is the nth number of fibonacci series. + \end{itemize} +\begin{lstlisting} +c = fibonacci(3) +\end{lstlisting} + \item c will contain 3rd number of fibonacci series,counting from 0. + \end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile] + \frametitle{Test Cases} + \begin{itemize} + \item Important to have test cases and expected outputs even before + writing the first test! + \item $n=3$, $fibonacci=2$ + \item $n=4$, $fibonacci=3$ + \item Tests are just a series of assertions + \item True or False, depending on expected and actual behavior + \end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile] + \frametitle{Test Cases -- Code} +\begin{lstlisting} +tc1 = fibonacci(3) +if tc1 != 2: + print "Failed for n=3. Expected 2. \ + Obtained %d instead." % tc1 + exit(1) + +tc2 = fibonacci(4) +if tc2 != 3: + print "Failed for n=4. Expected 3. \ + Obtained %d instead." % tc2 + exit(1) + +print "All tests passed!" +\end{lstlisting} +\begin{itemize} +\item The function \texttt{fibonacci} doesn't even exist! +\end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile] + \frametitle{Stubs} + \begin{itemize} + \item First write a very minimal definition of \texttt{fibonacci} + \begin{lstlisting} +def fibonacci(a): + pass + \end{lstlisting} + \item Written just, so that the tests can run + \item Obviously, the tests are going to fail + \end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[fragile] + \frametitle{\texttt{fibonacci.py}} +\begin{lstlisting} +def fibonacci(n): + pass + +if __name__ == '__main__': + tc1 = fibonacci(3) + if tc1 != 2: + print "Failed for n=3. \ + Expected 2. Obtained %d instead." % tc1 + exit(1) + tc2 = fibonacci(4) + if tc2 != 3: + print "Failed for n=4. \ + Expected 3. Obtained %d instead." % tc2 + exit(1) + print "All tests passed!" +\end{lstlisting} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[fragile] + \frametitle{First run} +\begin{lstlisting} +$ python fibonacci.py +Traceback (most recent call last): + File "fibonacci.py", line 8, in + print "Failed for n=3. Expected 2. + Obtained %d instead." % tc1 +TypeError: %d format: +a number is required, not NoneType +\end{lstlisting} %$ + + \begin{itemize} + \item We have our code unit stub, and a failing test. + \item The next step is to write code, so that the test just passes. + \end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[fragile] + \frametitle{Euclidean Algorithm} + \begin{itemize} + \item Modify the \texttt{fibonacci} stub function + \item Then, run the script to see if the tests pass. + \end{itemize} +\begin{lstlisting} +def fibonacci(n): + a, b = 0, 1 + for i in range(n): + a, b = b, a + b + return a + +\end{lstlisting} +\begin{lstlisting} +$ python fibonacci.py +All tests passed! +\end{lstlisting} %$ + \begin{itemize} + \item \alert{Success!} + \end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[fragile] + \frametitle{Euclidean Algorithm -- Recursive} + \begin{itemize} + \item Final improvement -- make \texttt{fibonacci} recursive + \item More readable and easier to understand +\begin{lstlisting} +def fibonacci(n): + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fibonacci(n-1) + fibonacci(n-2) + +\end{lstlisting} + \item Check that the tests pass again + \end{itemize} +\end{frame} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame} +\frametitle{Summary} +\label{sec-8} + + In this tutorial, we have learnt to, + + +\begin{itemize} +\item Undestand the basic steps involved in Test driven development. +\item Design a TDD approach for a given \texttt{fibonacci} function. + +\end{itemize} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[fragile] +\frametitle{Evaluation} +\label{sec-9} + + +\begin{enumerate} +\item ? +\vspace{8pt} +\item ? +\end{enumerate} +\end{frame} +\begin{frame} +\frametitle{Solutions} +\label{sec-10} + + +\begin{enumerate} +\item +\vspace{15pt} +\item +\end{enumerate} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} + + \begin{block}{} + \begin{center} + \textcolor{blue}{\Large THANK YOU!} + \end{center} + \end{block} +\begin{block}{} + \begin{center} + For more Information, visit our website\\ + \url{http://fossee.in/} + \end{center} + \end{block} +\end{frame} + + +\end{document} diff --git a/TDD/getting_started_with_tdd/tdd1_script.rst b/TDD/getting_started_with_tdd/tdd1_script.rst new file mode 100755 index 0000000..9da1613 --- /dev/null +++ b/TDD/getting_started_with_tdd/tdd1_script.rst @@ -0,0 +1,205 @@ +.. Objectives +.. ---------- + + .. At the end of this tutorial, you will be able to: + + .. 1. Know what is TDD. + .. 2. Understand the use of test cases. + .. 3. Write simple tests for a function. + +.. Prerequisites +.. ------------- + +.. 1. Getting started with functions + + +Script +------ + +.. L1 + +{{{ Show the first slide containing title, name of the production +team along with the logo of MHRD }}} + +.. R1 + +Hello friends and Welcome to the tutorial on +'Test driven development - Part 1'. + +.. L2 + +{{{ Show slide with objectives }}} + +.. R2 + +At the end of this tutorial, you will be able to, + + 1. understand basics of Test Driven Development. + #. understand the use test cases. + #. write simple tests for a function. + +.. L3 + +{{{ Switch to the slide3, pre-requisite slide }}} + +.. R3 + +Before beginning this tutorial,we would suggest you to complete the +tutorial on "Getting started with functions". + +.. R4 + +Test-driven development is a software development +process that relies on the repetition of a very short +development cycle. +In TDD,one writes a failing automated test case that +defines a desired improvement or new function, then produces +code to pass that test and finally refactors the new code to +acceptable standards. + + +.. L4 + +{{{ Switch to slide4 ,What is TDD?}}} + + +.. R5 + +To illustrate TDD, lets take a simple program. Consider a +function ``fibonacci``, that takes one argument and returns +the nth number of ``fibonacci`` series. + +.. L5 + +{{{ Switch to slide5, First test- fibonacci }}} + +.. R6 + +To test ``fibonacci`` function, we need test +cases. +As shown in this slide, +test cases are expected outputs for a given set of inputs. + + +.. L6 + +{{{ Switch to slide6, Test cases }}} + +.. R7 + +The sample code for test cases is shown here. Observe that if +any ``if`` statement is executed, test aborts after printing the +error message. + +.. L7 + +{{{ Switch to slide7, Test cases-Code }}} + +.. R8 + +The ``fibonacci`` function is written just enough so that +test can run. + + +.. L8 + +{{{ switch to slide8, Stubs }}} + +.. R9 + +Combine the function and test cases and put them together in +``fibonacci.py`` file.Add the test cases after name=main idiom. + +.. L9 + +{{{ Switch to slide9, fibonacci.py }}} + +.. R10 + +Lets run fibonacci.py by typing ``python fibonacci.py``. +As we haven't written any meaningful code in our ``fibonacci`` +function, it fails immediately. +Our next step is to write just minimum code to pass our tests. + +.. L10 + +{{{ Run the fibonacci.py in terminal and show the error output.}}} +:: + + python fibonacci.py + +.. R11 + +Modify the fibonacci stub function with given code. +Save and run it again as `` python fibonacci.py``. +{{{ pause }}} +Observe that, there will be no errors, as +the test passes successfully. + +.. L11 + +{{{ switch to slide-11, Euclidean Algorithm }}} +Switch to terminal and modify fibonacci function in ``nano`` +editor and run. +:: + + python fibonacci.py + +.. R12 + +The same ``fibonacci`` function is modified to make it more readable +and easy to understand using recursion. +Pause this video here.Replace the ``fibonacci`` function with recursive one. +Run the modified ``fibonacci.py`` file. The test should pass again +without any errors. +After successfully achieving this result, you can resume the video. + +.. L12 + +{{{ Show slide12, Euclidean Algorithm- Recursive}}} + + +.. R13 + +This brings us to the end of the tutorial.In this tutorial, + we have learnt to, + + 1. Undestand the basic steps involved in Test driven development. + #. Design a Test driven approach for a given ``fibonacci`` function. + + +.. L13 + +{{{ switch to slide-13,Summary }}} + +.. R14 + +Here are some self assessment questions for you to solve + 1. + + 2. + +.. L14 + +{{{ switch to slide-14, Evaluation }}} + +.. R15 + +And the answers are, + 1. + + 2. + +.. L15 + +{{{ switch to slide-15 ,Solutions}}} + +.. R16 + +Hope you have enjoyed this tutorial and found it useful. +Thank you! + +.. L16 + +{{{ Switch to slide-16, Thankyou}}} + -- cgit From b5a5acdddb2ef001e9c97a2959b0dbff9096423c Mon Sep 17 00:00:00 2001 From: Srikant Date: Tue, 24 Jan 2012 16:13:23 +0530 Subject: removed the old slide.tex --- TDD/getting_started_with_tdd/slide.tex | 352 --------------------------------- 1 file changed, 352 deletions(-) delete mode 100644 TDD/getting_started_with_tdd/slide.tex (limited to 'TDD/getting_started_with_tdd') diff --git a/TDD/getting_started_with_tdd/slide.tex b/TDD/getting_started_with_tdd/slide.tex deleted file mode 100644 index 54875f9..0000000 --- a/TDD/getting_started_with_tdd/slide.tex +++ /dev/null @@ -1,352 +0,0 @@ -\documentclass[12pt,presentation]{beamer} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{fixltx2e} -\usepackage{graphicx} -\usepackage{longtable} -\usepackage{float} -\usepackage{wrapfig} -\usepackage{soul} -\usepackage{textcomp} -\usepackage{marvosym} -\usepackage{wasysym} -\usepackage{latexsym} -\usepackage{amssymb} -\usepackage{hyperref} -\tolerance=1000 -\usepackage[english]{babel} \usepackage{ae,aecompl} -\usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet} -\usepackage{listings} -\lstset{language=Python, basicstyle=\ttfamily\bfseries, -commentstyle=\color{red}\itshape, stringstyle=\color{green}, -showstringspaces=false, keywordstyle=\color{blue}\bfseries} -\providecommand{\alert}[1]{\textbf{#1}} - -\title{Getting started with TDD} -\author{FOSSEE} -\institute{IIT Bombay} - -\usetheme{Warsaw}\usecolortheme{default}\useoutertheme{infolines}\setbeamercovered{transparent} - -\AtBeginSection[] -{ - \begin{frame} - \frametitle{Outline} - \tableofcontents[currentsection] - \end{frame} -} - -\begin{document} - -\begin{frame} - -\begin{center} -\vspace{12pt} -\textcolor{blue}{\huge Getting started with Test Driven Development} -\end{center} -\vspace{18pt} -\begin{center} -\vspace{10pt} -\includegraphics[scale=0.95]{../../images/fossee-logo.png}\\ -\vspace{5pt} -\scriptsize Developed by FOSSEE Team, IIT-Bombay. \\ -\scriptsize Funded by National Mission on Education through ICT\\ -\scriptsize MHRD,Govt. of India\\ -\includegraphics[scale=0.30]{../../images/iitb-logo.png}\\ -\end{center} -\end{frame} - -\begin{frame} -\frametitle{Outline} -\setcounter{tocdepth}{3} -\tableofcontents -\end{frame} - -\section{Introduction} - -\begin{frame} - \frametitle{Objectives} - At the end of this section, you will be able to: - \begin{itemize} - \item Understand the concept of Test Driven Development. - \item Write your code using the TDD paradigm. - \end{itemize} -\end{frame} - - -\begin{frame} -\frametitle{Pre-requisite} -\label{sec-3} - -Spoken tutorial on Basic Python -\begin{itemize} -\item Topic of tutorial here -\end{itemize} -\end{frame} - - -\begin{frame} - \frametitle{What is TDD?} - The basic steps of TDD are roughly as follows -- - \begin{enumerate} - \item Decide upon the feature to implement and the methodology of - testing it. - \item Write the tests for the feature decided upon. - \item Just write enough code, so that the test can be run, but it fails. - \item Improve the code, to just pass the test and at the same time - passing all previous tests. - \item Run the tests to see, that all of them run successfully. - \item Refactor the code you've just written -- optimize the algorithm, - remove duplication, add documentation, etc. - \item Run the tests again, to see that all the tests still pass. - \item Go back to 1. - \end{enumerate} -\end{frame} - -\section{First Test} - -\begin{frame}[fragile] - \frametitle{First Test -- GCD} - \begin{itemize} - \item simple program -- GCD of two numbers - \item What are our code units? - \begin{itemize} - \item Only one function \texttt{gcd} - \item Takes two numbers as arguments - \item Returns one number, which is their GCD - \end{itemize} -\begin{lstlisting} -c = gcd(44, 23) -\end{lstlisting} - \item c will contain the GCD of the two numbers. - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Test Cases} - \begin{itemize} - \item Important to have test cases and expected outputs even before - writing the first test! - \item $a=48$, $b=48$, $GCD=48$ - \item $a=44$, $b=19$, $GCD=1$ - \item Tests are just a series of assertions - \item True or False, depending on expected and actual behavior - \end{itemize} - -\end{frame} - -\begin{frame}[fragile] - \frametitle{Test Cases -- Code} -\begin{lstlisting} -tc1 = gcd(48, 64) -if tc1 != 16: - print "Failed for a=48, b=64. Expected 16. \ - Obtained %d instead." % tc1 - exit(1) - -tc2 = gcd(44, 19) -if tc2 != 1: - print "Failed for a=44, b=19. Expected 1. \ - Obtained %d instead." % tc2 - exit(1) - -print "All tests passed!" -\end{lstlisting} -\begin{itemize} -\item The function \texttt{gcd} doesn't even exist! -\end{itemize} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Stubs} - \begin{itemize} - \item First write a very minimal definition of \texttt{gcd} - \begin{lstlisting} -def gcd(a, b): - pass - \end{lstlisting} - \item Written just, so that the tests can run - \item Obviously, the tests are going to fail - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{\texttt{gcd.py}} -\begin{lstlisting} -def gcd(a, b): - pass - -if __name__ == '__main__': - tc1 = gcd(48, 64) - if tc1 != 16: - print "Failed for a=48 and b=64. \ - Expected 16. Obtained %d instead." % tc1 - exit(1) - tc2 = gcd(44, 19) - if tc2 != 1: - print "Failed for a=44 and b=19. \ - Expected 1. Obtained %d instead." % tc2 - exit(1) - print "All tests passed!" -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{First run} -\begin{lstlisting} -$ python gcd.py -Traceback (most recent call last): - File "gcd.py", line 7, in - print "Failed for a=48 and b=64. Expected 16. - Obtained %d instead." % tc1 -TypeError: %d format: -a number is required, not NoneType -\end{lstlisting} %$ - - \begin{itemize} - \item We have our code unit stub, and a failing test. - \item The next step is to write code, so that the test just passes. - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Euclidean Algorithm} - \begin{itemize} - \item Modify the \texttt{gcd} stub function - \item Then, run the script to see if the tests pass. - \end{itemize} -\begin{lstlisting} -def gcd(a, b): - if a == 0: - return b - while b != 0: - if a > b: - a = a - b - else: - b = b - a - return a -\end{lstlisting} -\begin{lstlisting} -$ python gcd.py -All tests passed! -\end{lstlisting} %$ - \begin{itemize} - \item \alert{Success!} - \end{itemize} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Euclidean Algorithm -- Modulo} - \begin{itemize} - \item Repeated subtraction can be replaced by a modulo - \item modulo of \texttt{a\%b} is always less than b - \item when \texttt{a < b}, \texttt{a\%b} equals \texttt{a} - \item Combine these two observations, and modify the code -\begin{lstlisting} -def gcd(a, b): - while b != 0: - a, b = b, a % b - return a -\end{lstlisting} - \item Check that the tests pass again - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Euclidean Algorithm -- Recursive} - \begin{itemize} - \item Final improvement -- make \texttt{gcd} recursive - \item More readable and easier to understand -\begin{lstlisting} -def gcd(a, b): - if b == 0: - return a - return gcd(b, a%b) -\end{lstlisting} - \item Check that the tests pass again - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Document \texttt{gcd}} - \begin{itemize} - \item Undocumented function is as good as unusable - \item Let's add a docstring \& We have our first test! - \end{itemize} -\begin{lstlisting} -def gcd(a, b): - """Returns the Greatest Common Divisor of the - two integers passed as arguments. - - Args: - a: an integer - b: another integer - - Returns: Greatest Common Divisor of a and b - """ - if b == 0: - return a - return gcd(b, a%b) -\end{lstlisting} -\end{frame} - - -\begin{frame}[fragile] - \frametitle{Persistent Test Cases} - \begin{itemize} - \item Tests should be pre-determined and written, before the code - \item Test Data is repeatedly used; Hence, saved in persistent - format - \item Let's save data for GCD tests in a text file. - \item The file shall have multiple lines of test data - \item Each line corresponds to a single test case - \item Each line consists of three comma separated values -- - \begin{itemize} - \item First two coloumns are the integers for which the GCD has to be - computed - \item Third coloumn is the expected GCD to the preceding two - numbers. - \end{itemize} - \item Let us call our data file \texttt{gcd\_testcases.dat} - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Modify \texttt{gcd.py}} -\begin{lstlisting} -if __name__ == '__main__': - for line in open('gcd_testcases.dat'): - values = line.split(', ') - a = int(values[0]) - b = int(values[1]) - g = int(values[2]) - - tc = gcd(a, b) - if tc != g: - print "Failed for a=%d and b=%d.\ - Expected %d. Obtained %d instead."\ - % (a, b, g, tc) - exit(1) - - print "All tests passed!" -\end{lstlisting} -\end{frame} - -\begin{frame} - - \begin{block}{} - \begin{center} - \textcolor{blue}{\Large THANK YOU!} - \end{center} - \end{block} -\begin{block}{} - \begin{center} - For more Information, visit our website\\ - \url{http://fossee.in/} - \end{center} - \end{block} -\end{frame} - -\end{document} -- cgit