#include <stream.h>
#include <List.h>

class TestObject : public Listable {
public:
  virtual char* classname() { return "TestObject"; }
  virtual IOstatus readContents()  { cin  >> a_; return ok; }
  virtual IOstatus writeContents() { cout << a_; return ok; }
  virtual Listable* duplicate() { return new TestObject(*this); }
private:
  char a_;
};

void testIterate()
{
  cerr << "Testing Iterating through a list\n";
  List a(new TestObject);
  int i;  // counter to prevent infinite loops
  TestObject* p;

  a.read();

  for (i = 0, p = (TestObject*)a.head();
       p != 0 && i < 100;
       p = (TestObject*)p->next(), i++) p->write();

  for (i = 0, p = (TestObject*)a.last();
       p != 0 && i < 100;
       p = (TestObject*)p->prev(), i++) p->write();

  ((TestObject*)a.head()->list())->write();

  a.clear();
  if (a.head() != 0 || a.last() != 0) cout << "ERROR!!!\n";
}
