protected function assert($first, $second, $msg, $cmp)
 {
     self::$tests++;
     switch ($cmp) {
         case BaseTest::CMP_E:
             if ($first === $second) {
                 return true;
             }
             break;
         case BaseTest::CMP_G:
             if ($first > $second) {
                 return true;
             }
             break;
         case BaseTest::CMP_GE:
             if ($first >= $second) {
                 return true;
             }
             break;
         case BaseTest::CMP_L:
             if ($first < $second) {
                 return true;
             }
             break;
         case BaseTest::CMP_LE:
             if ($first <= $second) {
                 return true;
             }
             break;
         case BaseTest::CMP_NE:
             if ($first != $second) {
                 return true;
             }
             break;
     }
     self::$state = BaseTest::STATE_ERROR;
     echo BaseTest::_indent($msg . ':', 2);
     echo BaseTest::_indent($first . ' <strong>' . self::$cmp_chars[$cmp] . '</strong> ' . $second, 3);
     return $msg;
 }