#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 testInsert()
{
  cerr << "Checking insertion of elements\n";

  List a(new TestObject);
  TestObject b,c,d;
  Listable* p;

  a.read();

  b.read();
  c.read();
  d.read();

  a.add(b);
  a.write();

  p = a.head()->next()->next();
  p->insertBefore(c);
  p->insertAfter(d);
  a.write();
}
