DBC Lecture Code Examples

Example 1 - find an element in an array

Note that they most important part is the SPECIFICATION which is in the comments above the function

#include <iostream>
#include <cassert>
using namespace std;
 
/**
 * Function Specification:
 * This function finds the number in a given array and returns
 * its first index in the array.
 * Pre-conditions:
 *      1. array argument must not be null
 *      2. arraysize argument must not be zero
 * Post-conditions:
 *      1. if number is found the found index is between 0
 *         and size of the array - 1
 *      2. if number is NOT found the found index is -1
 */
int findElement(int *arr, int arrsize, int number) {
    //check pre-conditions
    assert(arr != NULL);
    assert(arrsize != 0);
 
    bool bFound = false;
 
    int foundIndex = -1;
    for(int i = 0; i < arrsize; i++) {
        if (arr[i] == number) {
            foundIndex = i;
            bFound = true;
            break;
        }
    }
 
    //foundIndex++; //to test the first assert below
    //foundIndex--; //to test the second assert below
 
    //check post conditions and invariant foundIndex
    if (bFound)
        assert(foundIndex >=0 && foundIndex < arrsize);
    else
        assert(foundIndex == -1);
 
    return foundIndex;
}

Testing the findElement() function

Positive test case

int main() {
    int a[] = {1,2,3};
    cout << findElement(a, 3, 3) << endl;
}

Negative test case

int main() {
    int a[] = {1,2,3};
    cout << findElement(a, 3, 7) << endl;
}

Negative test case for assert when array is NULL

int main() {
    int *a;
    a = NULL;
    cout << findElement(a, 3, 7) << endl;
}

Negative test case for assert when array size is 0

int main() {
    int a[] = {1,2,3};
    cout << findElement(a, 0, 3) << endl;
}

Example 2: function to check if two arrays are same

#include <iostream>
#include <cassert>
using namespace std;
 
/**
 * Function SPECIFICATION:
 * check if two arrays are the same element for element.
 * Pre-conditions:
 *       1. First array is not null
 *       2. Second array is not null
 *       3. size of first array is more than 0
 *       4. size of second array is more than 0
 * Post-conditions:
 *       1. returns bool true of if arrays have same size
 *         and also elements in the same order
 *       2. returns bool false if arrays are not of same size
 *          or elements are different or in different order
 */
bool areArraysSame(int a[], int asize, int b[], int bsize) {
 
    assert(a != NULL || b != NULL);
    assert(asize != 0 || bsize != 0);
 
    bool bSame = true; //assume that the arrays are the same
 
    //check if really the arrays are the same
    if (asize != bsize) {
        bSame = false;
    }
    else {
        //sizes are the same now compare both the array elements
        for(int i = 0; i < asize; i++) {
            if (a[i] != b[i]) {
                bSame = false;
                break;
            }
        }
    }
    return bSame;
}

Positive test

 int main() {
    int a[] = {1,2,3,4};
    int b[] = {1,2,3,4};
    if(areArraysSame(a, 4, b, 4))
        cout << "Arrays are the same" << endl;
    else
        cout << "Arrays are different" << endl;
 
}

Negative test

 int main() {
    int a[] = {1,2,5,4};
    int b[] = {1,2,3,4};
    if(areArraysSame(a, 4, b, 4))
        cout << "Arrays are the same" << endl;
    else
        cout << "Arrays are different" << endl;
 
}

Negative test with one array as null

 int main() {
    int *a; a = NULL;
    int b[] = {1,2,3,4};
    if(areArraysSame(a, 4, b, 4))
        cout << "Arrays are the same" << endl;
    else
        cout << "Arrays are different" << endl;
 
}

Negative test with one of array's size as 0

 int main() {
    int a[] = {1,2,5,4};
    int b[] = {1,2,3,4};
    if(areArraysSame(a, 4, b, 0))
        cout << "Arrays are the same" << endl;
    else
        cout << "Arrays are different" << endl;
 
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License