Exemple #1
0
function testBinary($cnx, $values, $type, $options = array(), $msg = '')
{
    echo '==================================' . CLI_EOL;
    echo 'Test ' . $type . ' ' . $msg . CLI_EOL;
    $tt = strtolower($type);
    $rexp = create_REXP($values, $type, $options);
    $bin = Rserve_Parser::createBinary($rexp);
    //var_dump($bin);
    $i = 0;
    echo "Debug REXP" . CLI_EOL;
    var_dump(Rserve_Parser::parseDebug($bin, $i));
    $i = 0;
    echo "binary to REXP" . CLI_EOL;
    $r2 = Rserve_Parser::parseREXP($bin, $i);
    var_dump($r2);
    $cn2 = get_class($r2);
    $cn = get_class($rexp);
    if (strtolower($cn2) != strtolower($cn)) {
        echo 'Differentes classes' . CLI_EOL;
        return FALSE;
    } else {
        echo 'Class Type ok' . CLI_EOL;
    }
    $r = $cnx->assign('x', $rexp);
    if ($r['is_error']) {
        echo $cnx->getErrorMessage($r['error']);
    } else {
        echo "OK";
    }
    echo CLI_EOL;
    echo "Check R object" . CLI_EOL;
    $r = $cnx->evalString('x');
    var_dump($r);
}
Exemple #2
0
function testBinary($values, $type, $options = array(), $msg = '')
{
    echo 'Test ' . $type . ' ' . $msg . '<br/>';
    $cn = 'Rserve_REXP_' . $type;
    $r = new $cn();
    $tt = strtolower($type);
    if (is_subclass_of($r, 'Rserve_REXP_Vector')) {
        if (is_subclass_of($r, 'Rserve_REXP_List') and @$options['named']) {
            $r->setValues($values, TRUE);
        } else {
            $r->setValues($values);
        }
    } else {
        $r->setValue($values);
    }
    $bin = Rserve_Parser::createBinary($r);
    var_dump(Rserve_Parser::parseDebug($bin, 0));
    $r2 = Rserve_Parser::parseREXP($bin, 0);
    var_dump($r2);
    $cn2 = get_class($r2);
    if (strtolower($cn2) != strtolower($cn)) {
        echo 'Differentes classes';
        return FALSE;
    } else {
        echo 'Class Type ok';
    }
}
Exemple #3
0
 /**
  * @dataProvider providerTestParser
  * @param unknown_type $type
  * @param unknown_type $values
  */
 public function testParser($type, $values)
 {
     $rexp = $this->create_REXP($values, $type);
     $bin = Rserve_Parser::createBinary($rexp);
     $r2 = Rserve_Parser::parseREXP($bin, $i);
     $this->assertEquals(get_class($rexp), get_class($r2));
     $this->assertEquals($rexp->getValues(), $r2->getValues());
 }
Exemple #4
0
 /**
  * Evaluate a string as an R code and return result
  * @param string $string
  * @param int $parser 
  * @param REXP_List $attr
  */
 public function evalString($string, $parser = self::PARSER_NATIVE, $attr = NULL)
 {
     $r = $this->command(self::CMD_eval, $string);
     $i = 20;
     if (!$r['is_error']) {
         $buf = $r['contents'];
         $r = NULL;
         switch ($parser) {
             case self::PARSER_NATIVE:
                 $r = Rserve_Parser::parse($buf, $i, $attr);
                 break;
             case self::PARSER_REXP:
                 $r = Rserve_Parser::parseREXP($buf, $i, $attr);
                 break;
             case self::PARSER_DEBUG:
                 $r = Rserve_Parser::parseDebug($buf, $i, $attr);
                 break;
             case self::PARSER_NATIVE_WRAPPED:
                 $old = Rserve_Parser::$use_array_object;
                 Rserve_Parser::$use_array_object = TRUE;
                 $r = Rserve_Parser::parse($buf, $i, $attr);
                 Rserve_Parser::$use_array_object = $old;
                 break;
             default:
                 throw new Exception('Unknown parser');
         }
         return $r;
     }
     // TODO: contents and code in exception
     throw new Rserve_Exception('unable to evaluate');
 }
Exemple #5
0
 /**
  * 
  * Parse a response from Rserve
  * @param string $r
  * @param int $parser
  * @return parsed results 
  */
 private function parseResponse($buf, $parser)
 {
     $type = int8($buf, 0);
     if ($type != self::DT_SEXP) {
         // Check Data type of the packet
         throw new Rserve_Exception('Unexpected packet Data type (expect DT_SEXP)', $buf);
     }
     $i = 4;
     // + 4 bytes (Data part HEADER)
     $r = NULL;
     switch ($parser) {
         case self::PARSER_NATIVE:
             $r = Rserve_Parser::parse($buf, $i);
             break;
         case self::PARSER_REXP:
             $r = Rserve_Parser::parseREXP($buf, $i);
             break;
         case self::PARSER_DEBUG:
             $r = Rserve_Parser::parseDebug($buf, $i);
             break;
         case self::PARSER_NATIVE_WRAPPED:
             $old = Rserve_Parser::$use_array_object;
             Rserve_Parser::$use_array_object = TRUE;
             $r = Rserve_Parser::parse($buf, $i);
             Rserve_Parser::$use_array_object = $old;
             break;
         default:
             throw new Rserve_Exception('Unknown parser');
     }
     return $r;
 }