Please send questions to st10@humboldt.edu .
//---------------------------------------------------------------
// File: test_divide.cpp
// Name: Sharon M. Tuttle
// last modified: 3-23-05
//
// Purpose: tester for function divide
//--------------------------------------------------------------

#include <iostream>
#include "divide.h"
#include "node.h"
using namespace std;

int main()
{
    // set-up declarations
   
    // need to set up the linked list to be divided...!
    int value_array[6] = {3, 6, 2, 9, 1, 5};
    node *myHead;
    node *myTail;
    node *temp;
    node *result;

    myHead = new node(value_array[0]);
    myTail = myHead;

    for (int i = 1; i < 6; i++)
    {
        myTail->set_next(new node(value_array[i]));
        myTail = myTail->get_next();
    }
         
    // tests and associated cout's

    temp = myHead;

    cout << "BEFORE divide call #1: " << endl;
    cout << "should see: 3 6 2 9 1 5" << endl;
    cout << "do see    : ";
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    result = divide(myHead);

    cout << "AFTER divide call #1: " << endl;
    cout << "should see: 3 6 2" << endl;
    cout << "do see    : ";
    temp = myHead;
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    cout << "should see: 9 1 5" << endl;
    cout << "do see    : ";
    temp = result;
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    //------------ SET UP for 2nd divide call-----------------

    while (result != NULL)
    {
        temp = result->get_next();
        delete result;
        result = temp;
    }

    myHead = new node(value_array[0]);
    myTail = myHead;

    // this example list is 1 shorter...
    for (int i = 1; i < 5; i++)
    {
        myTail->set_next(new node(value_array[i]));
        myTail = myTail->get_next();
    }

    temp = myHead;

    cout << "BEFORE divide call #2: " << endl;
    cout << "should see: 3 6 2 9 1" << endl;
    cout << "do see    : ";
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    result = divide(myHead);

    cout << "AFTER divide call #2: " << endl;
    cout << "should see: 3 6 2" << endl;
    cout << "do see    : ";
    temp = myHead;
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    cout << "should see: 9 1" << endl;
    cout << "do see    : ";
    temp = result;
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    //-----set up for divide call #3----------------------------

    while (result != NULL)
    {
        temp = result->get_next();
        delete result;
        result = temp;
    }

    myHead = new node(value_array[0]);
    myTail = myHead;

    // this example list is only 2 items long...
    for (int i = 1; i < 2; i++)
    {
        myTail->set_next(new node(value_array[i]));
        myTail = myTail->get_next();
    }

    temp = myHead;

    cout << "BEFORE divide call #3: " << endl;
    cout << "should see: 3 6" << endl;
    cout << "do see    : ";
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    result = divide(myHead);

    cout << "AFTER divide call #3: " << endl;
    cout << "should see: 3" << endl;
    cout << "do see    : ";
    temp = myHead;
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    cout << "should see: 6" << endl;
    cout << "do see    : ";
    temp = result;
    while (temp != NULL)
    {
        cout << temp->get_data() << " ";
        temp = temp->get_next();
    }
    cout << endl;
    cout << endl;

    return EXIT_SUCCESS;
}