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); }
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'; } }
/** * @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()); }
/** * 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'); }
/** * * 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; }