
#include <mazematrixD3.h>
#include <mazematrixD3test.h>

string mazematrixD3test::doc[] = 
{
  "",
  "mazematrixD3 valid TODO",
  "",
  "Interactively moving cp in a cube"
};

void mazematrixD3test::test01()
{
  mazematrixD3<uint> mz(2,2,2);

  mz.link(1,2,3,0);
  mz.link(3,4,7,5);

  assertreturn(mz.valid());
}

void mazematrixD3test::test02()
{
  mazematrixD3<uint> mz(3,3,3);

  mz.link(1,2,4,0);
  mz.link(4,2,7,0);
  mz.link(7,4,16,5);
  mz.link(16,4,25,5);
  mz.link(25,4,22,5);
  mz.link(22,1,23,3);
  mz.link(23,2,26,0);
  mz.link(26,5,17,4);
  mz.link(17,4,8,5);
  mz.link(8,0,5,2);
  mz.link(5,4,14,5);
  mz.link(14,3,13,1);
  mz.link(13,0,10,2);
  mz.link(10,4,19,5);
  
  

  assertreturn(mz.valid());
}

void mazematrixD3test::test03()
{
  mazematrixD3<uint> mz(3,3,3);

  uint cp=1;
  uint cp2=cp;

  //cout << "Press" << endl;
  char ch;
  //ch = keypressed();
  //cin >> ch;
  //cout << "*" << (int)ch << "*" << endl;

  bool res=false;


  cout << "Move j=left k=right i=up m=down f=forward d=back" << endl;
  for (; ch!='q'; )
  {
    cin >> ch;

    switch (ch)
    {
      case 'j': mz.move(res,cp2,3,cp); break;
      case 'k': mz.move(res,cp2,1,cp); break;
      case 'i': mz.move(res,cp2,0,cp); break;
      case 'm': mz.move(res,cp2,2,cp); break;
      case 'f': mz.move(res,cp2,4,cp); break;
      case 'd': mz.move(res,cp2,5,cp); break;
    }

    cout << SHOW(res) << " ";
    if (res)
    {
      cp=cp2;
    }
    cout << SHOW(cp) << endl;

  }
}


