BATOSAY Shell
Server IP : 170.10.162.208  /  Your IP : 216.73.216.181
Web Server : LiteSpeed
System : Linux altar19.supremepanel19.com 4.18.0-553.69.1.lve.el8.x86_64 #1 SMP Wed Aug 13 19:53:59 UTC 2025 x86_64
User : deltahospital ( 1806)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/tmp/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /var/tmp/phpZJKlrq
--TEST--
Bug https://github.com/scoutapp/scout-apm-php-ext/issues/49 - only record arguments for fopen if it returns a resource
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);

// Note, in PHP 8 the warning changed from "failed to open stream" to "Failed to open stream" hence the %c
var_dump(fopen('/this/file/should/not/exist', 'r'));

var_dump(scoutapm_get_calls());
?>
--EXPECTF--
Warning: fopen(%s): %cailed to open stream: No such file or directory in %s
bool(false)
array(0) {
}
--TEST--
Running evaled code does not crash
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);
eval('echo "Evaled code called.\n";');
echo "End.\n";
?>
--EXPECTF--
Evaled code called.
End.
--TEST--
Calls to file_get_contents are logged
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

var_dump(in_array('file_get_contents', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

file_get_contents(__FILE__);
$call = scoutapm_get_calls()[0];

var_dump($call['function']);
var_dump($call['entered']);
var_dump($call['exited']);
var_dump($call['time_taken']);
var_dump($call['exited'] > $call['entered']);
var_dump($call['argv']);
?>
--EXPECTF--
bool(true)
string(17) "file_get_contents"
float(%f)
float(%f)
float(%f)
bool(true)
array(1) {
  [0]=>
  string(%d) "%s%etests%e002-file_get_contents.php"
}
--TEST--
Calls to fwrite and fread are logged with handle from tmpfile()
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

var_dump(in_array('fread', scoutapm_list_instrumented_functions()));
var_dump(in_array('fwrite', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$fh = tmpfile();

fwrite($fh, "fread/fwrite test\n");
fseek($fh, 0);
echo fread($fh, 18);
fclose($fh);

$calls = scoutapm_get_calls();

var_dump($calls[0]['function']);
var_dump($calls[0]['argv']);

var_dump($calls[1]['function']);
var_dump($calls[1]['argv']);
?>
--EXPECTF--
bool(true)
bool(true)
fread/fwrite test
string(6) "fwrite"
array(2) {
  [0]=>
  string(%d) "resource(%d)"
  [1]=>
  string(18) "fread/fwrite test
"
}
string(5) "fread"
array(2) {
  [0]=>
  string(%d) "resource(%d)"
  [1]=>
  int(18)
}
--TEST--
Memcached C extension functions are instrumented
--SKIPIF--
<?php
if (!extension_loaded("scoutapm")) die("skip scoutapm extension required.");
if (!extension_loaded("memcached")) die("skip memcached extension required.");

if (!getenv('CI')) {
    // Check Memcached is running & can connect to it
    // Run with: docker run --rm --name memcached -p 11211:11211 -d memcached
    $m = new Memcached();
    $m->addServer('localhost', 11211);
    if (!$m->flush()) {
      die("skip Could not connect to Memcached - is it running?");
    }
}
?>
--FILE--
<?php

echo implode("\n", array_intersect(
    [
        'memcached->add',
        'memcached->addbykey',
        'memcached->append',
        'memcached->appendbykey',
        'memcached->cas',
        'memcached->decrement',
        'memcached->decrementbykey',
        'memcached->delete',
        'memcached->deletebykey',
        'memcached->deletemulti',
        'memcached->deletemultibykey',
        'memcached->flush',
        'memcached->get',
        'memcached->getallkeys',
        'memcached->getbykey',
        'memcached->getmulti',
        'memcached->getmultibykey',
        'memcached->increment',
        'memcached->incrementbykey',
        'memcached->prepend',
        'memcached->prependbykey',
        'memcached->replace',
        'memcached->replacebykey',
        'memcached->set',
        'memcached->setbykey',
        'memcached->setmulti',
        'memcached->setmultibykey',
    ],
    scoutapm_list_instrumented_functions()
)) . "\n";
scoutapm_enable_instrumentation(true);

$m = new Memcached();
$m->addServer('localhost', 11211);
$m->setOption(Memcached::OPT_COMPRESSION, false);

$m->set('foo', 'bar');
var_dump($m->get('foo'));
$m->append('foo', 'baz');
$m->prepend('foo', 'gaz');
$m->replace('foo', 'bar');
$m->cas(0, 'foo', 'bar');
$m->add('num', 1);
$m->decrement('num');
$m->increment('num');
$m->delete('num');
$m->setMulti(['a' => 'a', 'b' => 'b']);
$m->getMulti(['a', 'b']);
$m->deleteMulti(['a', 'b']);

$m->setByKey('key', 'foo', 'bar');
$m->getByKey('key', 'foo');
$m->appendByKey('key', 'foo', 'baz');
$m->prependByKey('key', 'foo', 'gaz');
$m->replaceByKey('key', 'foo', 'bar');
$m->casByKey(0, 'key', 'foo', 'bar');
$m->addByKey('key', 'num', 1);
$m->decrementByKey('key', 'num');
$m->incrementByKey('key', 'num');
$m->deleteByKey('key', 'num');
$m->setMultiByKey('key', ['a' => 'a', 'b' => 'b']);
$m->getMultiByKey('key', ['a', 'b']);
$m->deleteMultiByKey('key', ['a', 'b']);

$m->getAllKeys();
$m->flush();

$calls = scoutapm_get_calls();

var_dump(array_column($calls, 'function'));

?>
--EXPECTF--
memcached->add
memcached->addbykey
memcached->append
memcached->appendbykey
memcached->cas
memcached->decrement
memcached->decrementbykey
memcached->delete
memcached->deletebykey
memcached->deletemulti
memcached->deletemultibykey
memcached->flush
memcached->get
memcached->getallkeys
memcached->getbykey
memcached->getmulti
memcached->getmultibykey
memcached->increment
memcached->incrementbykey
memcached->prepend
memcached->prependbykey
memcached->replace
memcached->replacebykey
memcached->set
memcached->setbykey
memcached->setmulti
memcached->setmultibykey
string(%s) "bar"
array(%d) {
  [%d]=>
  string(%d) "Memcached->set"
  [%d]=>
  string(%d) "Memcached->get"
  [%d]=>
  string(%d) "Memcached->append"
  [%d]=>
  string(%d) "Memcached->prepend"
  [%d]=>
  string(%d) "Memcached->replace"
  [%d]=>
  string(%d) "Memcached->cas"
  [%d]=>
  string(%d) "Memcached->add"
  [%d]=>
  string(%d) "Memcached->decrement"
  [%d]=>
  string(%d) "Memcached->increment"
  [%d]=>
  string(%d) "Memcached->delete"
  [%d]=>
  string(%d) "Memcached->setMulti"
  [%d]=>
  string(%d) "Memcached->getMulti"
  [%d]=>
  string(%d) "Memcached->deleteMulti"
  [%d]=>
  string(%d) "Memcached->setByKey"
  [%d]=>
  string(%d) "Memcached->getByKey"
  [%d]=>
  string(%d) "Memcached->appendByKey"
  [%d]=>
  string(%d) "Memcached->prependByKey"
  [%d]=>
  string(%d) "Memcached->replaceByKey"
  [%d]=>
  string(%d) "Memcached->casByKey"
  [%d]=>
  string(%d) "Memcached->addByKey"
  [%d]=>
  string(%d) "Memcached->decrementByKey"
  [%d]=>
  string(%d) "Memcached->incrementByKey"
  [%d]=>
  string(%d) "Memcached->deleteByKey"
  [%d]=>
  string(%d) "Memcached->setMultiByKey"
  [%d]=>
  string(%d) "Memcached->getMultiByKey"
  [%d]=>
  string(%d) "Memcached->deleteMultiByKey"
  [%d]=>
  string(%d) "Memcached->getAllKeys"
  [%d]=>
  string(%d) "Memcached->flush"
}
--TEST--
Check Scout APM extension is loaded
--FILE--
<?php
ob_start();
phpinfo(INFO_GENERAL);
$phpinfo = ob_get_clean();
foreach (explode("\n", $phpinfo) as $line) {
  if (stripos($line, '    with scoutapm') === 0) {
    var_dump($line);
  }
}

var_dump(extension_loaded('scoutapm'));
?>
--EXPECTF--
string(%d) "    with scoutapm v%s, Copyright %d, by Scout APM"
bool(true)
--TEST--
Predis userland functions are supported
--SKIPIF--
<?php
if (!extension_loaded("scoutapm")) die("skip scoutapm extension required.");
if (shell_exec("which composer") === null) die("skip composer not found in path.");

$out = null;
$result = null;
exec("mkdir -p /tmp/scout_predis_test && cd /tmp/scout_predis_test && composer require -n predis/predis", $out, $result);

if ($result !== 0) {
  die("skip composer failed: " . implode(", ", $out));
}

if (!getenv('CI')) {
    require "/tmp/scout_predis_test/vendor/autoload.php";

    // Check Redis is running & can connect to it
    // Run with: docker run --rm --name redis -p 6379:6379 -d redis
    $client = new \Predis\Client();
    try {
      $client->connect();
    } catch (\Predis\Connection\ConnectionException $e) {
      die("skip " . $e->getMessage());
    }
}
?>
--FILE--
<?php

echo implode("\n", array_intersect(
    [
        'Predis\Client->append',
        'Predis\Client->decr',
        'Predis\Client->decrBy',
        'Predis\Client->get',
        'Predis\Client->getBit',
        'Predis\Client->getRange',
        'Predis\Client->getSet',
        'Predis\Client->incr',
        'Predis\Client->incrBy',
        'Predis\Client->mGet',
        'Predis\Client->mSet',
        'Predis\Client->mSetNx',
        'Predis\Client->set',
        'Predis\Client->setBit',
        'Predis\Client->setEx',
        'Predis\Client->pSetEx',
        'Predis\Client->setNx',
        'Predis\Client->setRange',
        'Predis\Client->strlen',
        'Predis\Client->del',
    ],
    scoutapm_list_instrumented_functions()
)) . "\n";
scoutapm_enable_instrumentation(true);

require "/tmp/scout_predis_test/vendor/autoload.php";

$client = new \Predis\Client();

// Simple operations
$client->set('foo', 'bar');
var_dump($client->get('foo'));
$client->append('foo', 'baz');
$client->del('foo');
$client->getSet('foo', 'bat');
$client->getRange('foo', 0, 2);
$client->setRange('foo', 0, 'qux');
$client->setEx('expire1', 1, 'value1');
$client->pSetEx('expire2', 1, 'value2');
$client->setNx('fuu', 'new');
$client->strlen('fuu');

// Increment/Decrement
$client->set('count', 0);
$client->incr('count');
$client->decr('count');
$client->incrBy('count', 2);
$client->decrBy('count', 2);

// Multi-operations
$client->mSet(['a' => 'a', 'b' => 'b']);
$client->mSetNx(['c' => 'c', 'd' => 'd']);
$client->mGet(['a', 'b', 'c', 'd']);

// Bit operations
$client->set('bit', 0);
$client->setBit('bit', 8, 1);
$client->getBit('bit', 8);

$calls = scoutapm_get_calls();

var_dump(array_column($calls, 'function'));

?>
--CLEAN--
<?php
shell_exec("rm -Rf /tmp/scout_predis_test");
?>
--EXPECTF--
Predis\Client->append
Predis\Client->decr
Predis\Client->decrBy
Predis\Client->get
Predis\Client->getBit
Predis\Client->getRange
Predis\Client->getSet
Predis\Client->incr
Predis\Client->incrBy
Predis\Client->mGet
Predis\Client->mSet
Predis\Client->mSetNx
Predis\Client->set
Predis\Client->setBit
Predis\Client->setEx
Predis\Client->pSetEx
Predis\Client->setNx
Predis\Client->setRange
Predis\Client->strlen
Predis\Client->del
string(%s) "bar"
array(%d) {
  [%d]=>
  string(%d) "Predis\Client->set"
  [%d]=>
  string(%d) "Predis\Client->get"
  [%d]=>
  string(%d) "Predis\Client->append"
  [%d]=>
  string(%d) "Predis\Client->del"
  [%d]=>
  string(%d) "Predis\Client->getSet"
  [%d]=>
  string(%d) "Predis\Client->getRange"
  [%d]=>
  string(%d) "Predis\Client->setRange"
  [%d]=>
  string(%d) "Predis\Client->setEx"
  [%d]=>
  string(%d) "Predis\Client->pSetEx"
  [%d]=>
  string(%d) "Predis\Client->setNx"
  [%d]=>
  string(%d) "Predis\Client->strlen"
  [%d]=>
  string(%d) "Predis\Client->set"
  [%d]=>
  string(%d) "Predis\Client->incr"
  [%d]=>
  string(%d) "Predis\Client->decr"
  [%d]=>
  string(%d) "Predis\Client->incrBy"
  [%d]=>
  string(%d) "Predis\Client->decrBy"
  [%d]=>
  string(%d) "Predis\Client->mSet"
  [%d]=>
  string(%d) "Predis\Client->mSetNx"
  [%d]=>
  string(%d) "Predis\Client->mGet"
  [%d]=>
  string(%d) "Predis\Client->set"
  [%d]=>
  string(%d) "Predis\Client->setBit"
  [%d]=>
  string(%d) "Predis\Client->getBit"
}
--TEST--
Bug https://github.com/scoutapp/scout-apm-php-ext/issues/71 - only record arguments for prepare if it returns an object
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("PDO")) die("skip PDO extension required."); ?>
<?php if (!extension_loaded("pdo_sqlite")) die("skip pdo_sqlite extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);

$dbh = new PDO('sqlite::memory:');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$stmt = $dbh->prepare("SELECT nonexist FROM nonexist");

?>
--EXPECTF--
Warning: PDO::prepare(): SQLSTATE[HY000]: General error: 1 no such table: nonexist in %s
--TEST--
Bug https://github.com/scoutapp/scout-apm-php-ext/issues/55 - don't crash when using an observed method in extended class
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("PDO")) die("skip PDO extension required."); ?>
<?php if (!extension_loaded("pdo_sqlite")) die("skip pdo_sqlite extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);

class MyOwnPDO extends PDO {}

$dbh = new MyOwnPDO('sqlite::memory:');
$stmt = $dbh->query("SELECT cast(1 + 2 AS text) AS result");
var_dump($stmt->fetch(PDO::FETCH_ASSOC));

$calls = scoutapm_get_calls();
var_dump($calls[0]['function']);
var_dump($calls[0]['argv'][0]);
?>
--EXPECTF--
array(%d) {
  ["result"]=>
  string(%d) "3"
}
string(%d) "PDO->query"
string(%d) "SELECT cast(1 + 2 AS text) AS result"
--TEST--
Calls to PDO::exec are logged
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("PDO")) die("skip PDO extension required."); ?>
<?php if (!extension_loaded("pdo_sqlite")) die("skip pdo_sqlite extension required."); ?>
--FILE--
<?php

var_dump(in_array('pdo->exec', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$dbh = new PDO('sqlite::memory:');
$dbh->exec("CREATE TABLE foo (col INT PRIMARY KEY)");
$dbh->exec("INSERT INTO foo (col) VALUES (1), (2) ");

$calls = scoutapm_get_calls();
var_dump($calls[0]['function']);
var_dump($calls[0]['argv'][0]);
var_dump($calls[1]['function']);
var_dump($calls[1]['argv'][0]);
?>
--EXPECTF--
bool(true)
string(9) "PDO->exec"
string(38) "CREATE TABLE foo (col INT PRIMARY KEY)"
string(9) "PDO->exec"
string(38) "INSERT INTO foo (col) VALUES (1), (2) "
--TEST--
Bug https://github.com/scoutapp/scout-apm-php-ext/issues/88 - memory usage should not increase when no instrumentation happens
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php /* PHP_OS_FAMILY === "Windows" - needs PHP 7.2+ */ if (stripos(PHP_OS, 'Win') === 0) die("skip not for Windows."); ?>
--FILE--
<?php

class A {
  function b() {}
}

$a = new A();

scoutapm_enable_instrumentation(true);

$before = (int) (exec("ps --pid " . getmypid() . " --no-headers -o rss"));
for ($i = 0; $i <= 10000000; $i++) {
    $a->b();
}
$after = (int) (exec("ps --pid " . getmypid() . " --no-headers -o rss"));

echo "Before & after:\n";
var_dump($before, $after);

echo "Difference:\n";
var_dump($after - $before);

$threshold = 500; // bytes
echo "Within $threshold bytes limit:\n";
var_dump(($after - $before) < $threshold);

?>
--EXPECTF--
Before & after:
int(%d)
int(%d)
Difference:
int(%d)
Within %d bytes limit:
bool(true)
--TEST--
Ensures that calls to scoutapm_get_calls() clears the call list
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);
file_get_contents(__FILE__);
var_dump(count(scoutapm_get_calls()));
var_dump(count(scoutapm_get_calls()));
file_get_contents(__FILE__);
var_dump(count(scoutapm_get_calls()));
var_dump(count(scoutapm_get_calls()));
?>
--EXPECT--
int(1)
int(0)
int(1)
int(0)
<?php

echo "External file has been included.\n";
--TEST--
Both URL and Method can be captured using curl + CURLOPT_CUSTOMREQUEST
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("curl")) die("skip curl extension required."); ?>
--FILE--
<?php

var_dump(in_array('curl_exec', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://scoutapm.com/robots.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_USERAGENT, 'scoutapp/scout-apm-php-ext Test Suite curl');
curl_exec($ch);

$call = scoutapm_get_calls()[0];

var_dump($call['function']);
var_dump($call['argv']);
?>
--EXPECTF--
bool(true)
string(9) "curl_exec"
array(%d) {
  [%d]=>
  string(%d) "https://scoutapm.com/robots.txt"
  [%d]=>
  NULL
  [%d]=>
  string(%d) "POST"
}
--TEST--
Bug https://github.com/scoutapp/scout-apm-php-ext/issues/93 - Should not segfault on static function usage
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

scoutapm_enable_instrumentation(true);

(static function () {
    echo "Called 1.\n";
})();

$declared = static function () {
    echo "Called 2.\n";
};
$declared();

class A {
    static function thing() {
        echo "Called 3.\n";
    }
}
A::thing();

?>
--EXPECTF--
Called 1.
Called 2.
Called 3.
--TEST--
Calls to PDOStatement::execute are logged when created from PDO->prepare()
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("PDO")) die("skip PDO extension required."); ?>
<?php if (!extension_loaded("pdo_sqlite")) die("skip pdo_sqlite extension required."); ?>
--FILE--
<?php

var_dump(in_array('pdo->prepare', scoutapm_list_instrumented_functions()));
var_dump(in_array('pdostatement->execute', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$dbh = new PDO('sqlite::memory:');
$stmt1 = $dbh->prepare("SELECT 1 + 2");
$stmt2 = $dbh->prepare("SELECT 3 + 4");
$stmt1->execute();
$stmt2->execute();

$calls = scoutapm_get_calls();
var_dump($calls[0]['function']);
var_dump($calls[0]['argv']);
var_dump($calls[1]['function']);
var_dump($calls[1]['argv']);
?>
--EXPECTF--
bool(true)
bool(true)
string(21) "PDOStatement->execute"
array(1) {
  [0]=>
  string(%d) "SELECT 1 + 2"
}
string(21) "PDOStatement->execute"
array(1) {
  [0]=>
  string(%d) "SELECT 3 + 4"
}
--TEST--
Elasticsearch userland functions are supported
--SKIPIF--
<?php
if (!extension_loaded("scoutapm")) die("skip scoutapm extension required.");
if (!extension_loaded("curl")) die("skip Elasticsearch needs the curl extension.");
if (shell_exec("which composer") === null) die("skip composer not found in path.");

$out = null;
$result = null;
exec("mkdir -p /tmp/scout_elastic_test && cd /tmp/scout_elastic_test && composer require -n elasticsearch/elasticsearch:^7.1", $out, $result);

if ($result !== 0) {
  die("skip composer failed: " . implode(", ", $out));
}

if (!getenv('CI')) {
    require "/tmp/scout_elastic_test/vendor/autoload.php";

    // Check Elasticsearch is running & can connect to it
    // Run with: docker run --rm --name elasticsearch -p 9200:9200 -e discovery.type=single-node -d elasticsearch:7.13.1
    $client = \Elasticsearch\ClientBuilder::create()->build();
    try {
        $client->search([]);
    } catch (\Elasticsearch\Common\Exceptions\NoNodesAvailableException $e) {
      die("skip " . $e->getMessage());
    }
}
?>
--FILE--
<?php

echo implode("\n", array_intersect(
    [
        'Elasticsearch\Client->index',
        'Elasticsearch\Client->get',
        'Elasticsearch\Client->search',
        'Elasticsearch\Client->delete',
    ],
    scoutapm_list_instrumented_functions()
)) . "\n";
scoutapm_enable_instrumentation(true);

require "/tmp/scout_elastic_test/vendor/autoload.php";

$client = \Elasticsearch\ClientBuilder::create()->build();

$client->index(['index' => 'my_index', 'id' => 'my_id', 'body' => ['testField' => 'abc']]);
$client->get(['index' => 'my_index', 'id' => 'my_id']);
$client->search(['index' => 'my_index', 'body' => ['query' => ['match' => ['testField' => 'abc']]]]);
$client->delete(['index' => 'my_index', 'id' => 'my_id']);

$calls = scoutapm_get_calls();

var_dump(array_column($calls, 'function'));

?>
--CLEAN--
<?php
shell_exec("rm -Rf /tmp/scout_elastic_test");
?>
--EXPECTF--
Elasticsearch\Client->index
Elasticsearch\Client->get
Elasticsearch\Client->search
Elasticsearch\Client->delete
array(%d) {
  [%d]=>
  string(%d) "Elasticsearch\Client->index"
  [%d]=>
  string(%d) "Elasticsearch\Client->get"
  [%d]=>
  string(%d) "Elasticsearch\Client->search"
  [%d]=>
  string(%d) "Elasticsearch\Client->delete"
}
--TEST--
Calls to file_get_contents are logged
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

namespace {
    var_dump(in_array('file_get_contents', scoutapm_list_instrumented_functions()));
    scoutapm_enable_instrumentation(true);
}

namespace SomeNamespace {
    function file_get_contents(string $_) {}

    echo "should not be logged: function defined in namespace, call implicitly resolves to namespaced function\n";
    file_get_contents(__FILE__);
    var_dump(scoutapm_get_calls());
}

namespace {
    echo "should not be logged - explicit, unimported call to another namespace\n";
    \SomeNamespace\file_get_contents(__FILE__);
    var_dump(scoutapm_get_calls());
}

namespace {
    use function SomeNamespace\file_get_contents;

    echo "should not be logged - imported call resolves to namespaced function\n";
    file_get_contents(__FILE__);
    var_dump(scoutapm_get_calls());
}

namespace {
    echo "SHOULD be logged\n";
    file_get_contents(__FILE__);
    var_dump(scoutapm_get_calls());
}
?>
--EXPECTF--
bool(true)
should not be logged: function defined in namespace, call implicitly resolves to namespaced function
array(0) {
}
should not be logged - explicit, unimported call to another namespace
array(0) {
}
should not be logged - imported call resolves to namespaced function
array(0) {
}
SHOULD be logged
array(1) {
  [0]=>
  array(5) {
    ["function"]=>
    string(17) "file_get_contents"
    ["entered"]=>
    float(%f)
    ["exited"]=>
    float(%f)
    ["time_taken"]=>
    float(%f)
    ["argv"]=>
    array(1) {
      [0]=>
      string(%d) "%s%etests%e004-namespaced-fgc-is-not-logged.php"
    }
  }
}
--TEST--
Calls to file_put_contents are logged
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

var_dump(in_array('file_put_contents', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$file = tempnam(sys_get_temp_dir(), 'scout-apm-php-ext-test');
file_put_contents($file, 'test content');
$call = scoutapm_get_calls()[0];

var_dump(file_get_contents($file));
var_dump($call['function']);
var_dump($call['argv']);
?>
--EXPECTF--
bool(true)
string(12) "test content"
string(17) "file_put_contents"
array(2) {
  [0]=>
  string(%d) "%s"
  [1]=>
  string(12) "test content"
}
--TEST--
Executing a closure/anonymous function does not crash
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);
$func = function () {
  echo "Anonymous function called.\n";
};
$func();
echo "End.\n";
?>
--EXPECTF--
Anonymous function called.
End.
--TEST--
Both URL and Method can be captured using file_get_contents
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("json")) die("skip json extension required."); ?>
--FILE--
<?php

var_dump(in_array('file_get_contents', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

@file_get_contents(
    'https://scoutapm.com/robots.txt',
    false,
    stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => [
                'User-Agent: scoutapp/scout-apm-php-ext Test Suite FGC',
            ],
        ],
    ])
);
$call = scoutapm_get_calls()[0];

var_dump($call['function']);
var_dump($call['argv'][0]);
var_dump(json_decode($call['argv'][2], true)['http']['method']);
?>
--EXPECTF--
bool(true)
string(%d) "file_get_contents"
string(%d) "https://scoutapm.com/robots.txt"
string(%d) "POST"
--TEST--
Class without a defined constructor does not crash
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);
class Foo {}
$x = new Foo();
echo "End.\n";
?>
--EXPECTF--
End.
--TEST--
Bug https://github.com/scoutapp/scout-apm-php-ext/issues/47 - fix segfault when accessing argument store out of bounds
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);

$f1 = fopen(tempnam(sys_get_temp_dir(), 'scoutapm-test'), 'w+');
$f2 = tmpfile();

fwrite($f2, "fread/fwrite test");
var_dump(scoutapm_get_calls()[0]['argv']);
?>
--EXPECTF--
array(2) {
  [0]=>
  string(%d) "resource(%d)"
  [1]=>
  string(%d) "fread/fwrite test"
}
--TEST--
Both URL and Method can be captured using curl + CURLOPT_POST
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("curl")) die("skip curl extension required."); ?>
--FILE--
<?php

var_dump(in_array('curl_exec', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://scoutapm.com/robots.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'scoutapp/scout-apm-php-ext Test Suite curl');
curl_exec($ch);

$call = scoutapm_get_calls()[0];

var_dump($call['function']);
var_dump($call['argv']);
?>
--EXPECTF--
bool(true)
string(9) "curl_exec"
array(%d) {
  [%d]=>
  string(%d) "https://scoutapm.com/robots.txt"
  [%d]=>
  bool(true)
  [%d]=>
  NULL
}
--TEST--
Do not instrument anything by default, unless scoutapm_enable_instrumentation(true) is called
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

var_dump(in_array('file_get_contents', scoutapm_list_instrumented_functions()));

file_get_contents(__FILE__);
var_dump(scoutapm_get_calls());

scoutapm_enable_instrumentation(true);
file_get_contents(__FILE__);
var_dump(array_column(scoutapm_get_calls(), 'function'));

scoutapm_enable_instrumentation(false);
file_get_contents(__FILE__);
var_dump(scoutapm_get_calls());
?>
--EXPECTF--
bool(true)
array(0) {
}
array(1) {
  [0]=>
  string(%s) "file_get_contents"
}
array(0) {
}
--TEST--
Elasticsearch userland functions are supported
--SKIPIF--
<?php
if (!extension_loaded("scoutapm")) die("skip scoutapm extension required.");
if (!extension_loaded("curl")) die("skip Elasticsearch needs the curl extension.");
if (shell_exec("which composer") === null) die("skip composer not found in path.");

$out = null;
$result = null;
exec("mkdir -p /tmp/scout_elastic_test && cd /tmp/scout_elastic_test && composer require -n elasticsearch/elasticsearch:^8.0", $out, $result);

if ($result !== 0) {
  die("skip composer failed: " . implode(", ", $out));
}

if (!getenv('CI')) {
    require "/tmp/scout_elastic_test/vendor/autoload.php";

    // Check Elasticsearch is running & can connect to it
    /* Run with:
docker run --rm --name elasticsearch \
  -p 9200:9200 \
  -e discovery.type=single-node \
  -e xpack.security.enabled=false \
  -e xpack.security.enrollment.enabled=false \
  -e xpack.security.http.ssl.enabled=false \
  -e xpack.security.transport.ssl.enabled=false \
  elasticsearch:8.1.2
    */
    $client = \Elastic\Elasticsearch\ClientBuilder::create()
        ->setHosts(['localhost:9200'])
        ->build();
    try {
        $client->search([]);
    } catch (\Elastic\Elasticsearch\Common\Exceptions\NoNodesAvailableException $e) {
      die("skip " . $e->getMessage());
    }
}
?>
--FILE--
<?php

echo implode("\n", array_intersect(
    [
        'Elastic\Elasticsearch\Client->index',
        'Elastic\Elasticsearch\Client->get',
        'Elastic\Elasticsearch\Client->search',
        'Elastic\Elasticsearch\Client->delete',
    ],
    scoutapm_list_instrumented_functions()
)) . "\n";
scoutapm_enable_instrumentation(true);

require "/tmp/scout_elastic_test/vendor/autoload.php";

$client = \Elastic\Elasticsearch\ClientBuilder::create()
    ->setHosts(['localhost:9200'])
    ->build();

$client->index(['index' => 'my_index', 'id' => 'my_id', 'body' => ['testField' => 'abc']]);
$client->get(['index' => 'my_index', 'id' => 'my_id']);
$client->search(['index' => 'my_index', 'body' => ['query' => ['match' => ['testField' => 'abc']]]]);
$client->delete(['index' => 'my_index', 'id' => 'my_id']);

$calls = scoutapm_get_calls();

var_dump(array_column($calls, 'function'));

?>
--CLEAN--
<?php
shell_exec("rm -Rf /tmp/scout_elastic_test");
?>
--EXPECTF--
Elastic\Elasticsearch\Client->index
Elastic\Elasticsearch\Client->get
Elastic\Elasticsearch\Client->search
Elastic\Elasticsearch\Client->delete
array(%d) {
  [%d]=>
  string(%d) "Elastic\Elasticsearch\Client->index"
  [%d]=>
  string(%d) "Elastic\Elasticsearch\Client->get"
  [%d]=>
  string(%d) "Elastic\Elasticsearch\Client->search"
  [%d]=>
  string(%d) "Elastic\Elasticsearch\Client->delete"
}
--TEST--
PHP Redis C extension functions are instrumented
--SKIPIF--
<?php
if (!extension_loaded("scoutapm")) die("skip scoutapm extension required.");
if (!extension_loaded("redis")) die("skip redis extension required.");

if (!getenv('CI')) {
    // Check Redis is running & can connect to it
    // Run with: docker run --rm --name redis -p 6379:6379 -d redis
    $client = new Redis();
    try {
      $client->connect('127.0.0.1', 6379);
    } catch (\RedisException $e) {
      die("skip " . $e->getMessage());
    }
}
?>
--FILE--
<?php

echo implode("\n", array_intersect(
    [
        'redis->append',
        'redis->decr',
        'redis->decrby',
        'redis->get',
        'redis->getbit',
        'redis->getrange',
        'redis->getset',
        'redis->incr',
        'redis->incrby',
        'redis->mget',
        'redis->mset',
        'redis->msetnx',
        'redis->set',
        'redis->setbit',
        'redis->setex',
        'redis->psetex',
        'redis->setnx',
        'redis->setrange',
        'redis->strlen',
        'redis->del',
    ],
    scoutapm_list_instrumented_functions()
)) . "\n";
scoutapm_enable_instrumentation(true);

$client = new Redis();
$client->connect('127.0.0.1', 6379);

// Simple operations
$client->set('foo', 'bar');
var_dump($client->get('foo'));
$client->append('foo', 'baz');
$client->del('foo');
$client->getSet('foo', 'bat');
$client->getRange('foo', 0, 2);
$client->setRange('foo', 0, 'qux');
$client->setEx('expire1', 1, 'value1');
$client->pSetEx('expire2', 1, 'value2');
$client->setNx('fuu', 'new');
$client->strlen('fuu');

// Increment/Decrement
$client->set('count', 0);
$client->incr('count');
$client->decr('count');
$client->incrBy('count', 2);
$client->decrBy('count', 2);

// Multi-operations
$client->mSet(['a' => 'a', 'b' => 'b']);
$client->mSetNx(['c' => 'c', 'd' => 'd']);
$client->mGet(['a', 'b', 'c', 'd']);

// Bit operations
$client->set('bit', 0);
$client->setBit('bit', 8, 1);
$client->getBit('bit', 8);

$calls = scoutapm_get_calls();

var_dump(array_column($calls, 'function'));

?>
--EXPECTF--
redis->append
redis->decr
redis->decrby
redis->get
redis->getbit
redis->getrange
redis->getset
redis->incr
redis->incrby
redis->mget
redis->mset
redis->msetnx
redis->set
redis->setbit
redis->setex
redis->psetex
redis->setnx
redis->setrange
redis->strlen
redis->del
string(%s) "bar"
array(%d) {
  [%d]=>
  string(%d) "Redis->set"
  [%d]=>
  string(%d) "Redis->get"
  [%d]=>
  string(%d) "Redis->append"
  [%d]=>
  string(%d) "Redis->del"
  [%d]=>
  string(%d) "Redis->get%cet"
  [%d]=>
  string(%d) "Redis->getRange"
  [%d]=>
  string(%d) "Redis->setRange"
  [%d]=>
  string(%d) "Redis->setex"
  [%d]=>
  string(%d) "Redis->psetex"
  [%d]=>
  string(%d) "Redis->setnx"
  [%d]=>
  string(%d) "Redis->strlen"
  [%d]=>
  string(%d) "Redis->set"
  [%d]=>
  string(%d) "Redis->incr"
  [%d]=>
  string(%d) "Redis->decr"
  [%d]=>
  string(%d) "Redis->incrBy"
  [%d]=>
  string(%d) "Redis->decrBy"
  [%d]=>
  string(%d) "Redis->mset"
  [%d]=>
  string(%d) "Redis->msetnx"
  [%d]=>
  string(%d) "Redis->mget"
  [%d]=>
  string(%d) "Redis->set"
  [%d]=>
  string(%d) "Redis->setBit"
  [%d]=>
  string(%d) "Redis->getBit"
}
--TEST--
Calls to PDO::query are logged
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("PDO")) die("skip PDO extension required."); ?>
<?php if (!extension_loaded("pdo_sqlite")) die("skip pdo_sqlite extension required."); ?>
--FILE--
<?php

var_dump(in_array('pdo->query', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$dbh = new PDO('sqlite::memory:');
$stmt = $dbh->query("SELECT cast(1 + 2 AS text) AS result");
var_dump($stmt->fetch(PDO::FETCH_ASSOC));

$calls = scoutapm_get_calls();
var_dump($calls[0]['function']);
var_dump($calls[0]['argv'][0]);
?>
--EXPECTF--
bool(true)
array(%d) {
  ["result"]=>
  string(%d) "3"
}
string(%d) "PDO->query"
string(%d) "SELECT cast(1 + 2 AS text) AS result"
--TEST--
When calls to functions are recorded, and scoutapm_get_calls is not called, don't leak memory
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!defined("PHP_DEBUG") || PHP_DEBUG != 1) die("skip Recompile PHP with --enable-debug."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);
file_put_contents(__FILE__ . ".x", file_get_contents(__FILE__));
unlink(__FILE__ . ".x");
echo "end";
?>
--EXPECTREGEX--
end((?!memory leaks detected).)*
--TEST--
Requires to external files do not crash
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php
scoutapm_enable_instrumentation(true);
require 'external.inc';
echo "End.\n";
?>
--EXPECTF--
External file has been included.
End.
--TEST--
Calls to fwrite and fread are logged with handle from fopen()
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
--FILE--
<?php

var_dump(in_array('fread', scoutapm_list_instrumented_functions()));
var_dump(in_array('fwrite', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$fh = fopen(tempnam(sys_get_temp_dir(), 'scoutapm-test'), 'w+');

fwrite($fh, "fread/fwrite test\n");
fseek($fh, 0);
echo fread($fh, 18);
fclose($fh);

$calls = scoutapm_get_calls();

var_dump($calls[0]['function']);
var_dump($calls[0]['argv']);

var_dump($calls[1]['function']);
var_dump($calls[1]['argv']);
?>
--EXPECTF--
bool(true)
bool(true)
fread/fwrite test
string(6) "fwrite"
array(2) {
  [0]=>
  string(%d) "%s"
  [1]=>
  string(%d) "w+"
}
string(5) "fread"
array(2) {
  [0]=>
  string(%d) "%s"
  [1]=>
  string(%d) "w+"
}
--TEST--
Calls to curl_exec are logged
--SKIPIF--
<?php if (!extension_loaded("scoutapm")) die("skip scoutapm extension required."); ?>
<?php if (!extension_loaded("curl")) die("skip curl extension required."); ?>
--FILE--
<?php

var_dump(in_array('curl_exec', scoutapm_list_instrumented_functions()));
scoutapm_enable_instrumentation(true);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "file://" . __FILE__);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);

$call = scoutapm_get_calls()[0];

var_dump($call['function']);
var_dump($call['entered']);
var_dump($call['exited']);
var_dump($call['time_taken']);
var_dump($call['exited'] > $call['entered']);
var_dump($call['argv']);
?>
--EXPECTF--
bool(true)
string(9) "curl_exec"
float(%f)
float(%f)
float(%f)
bool(true)
array(%d) {
  [%d]=>
  string(%d) "file://%s%etests%e009-curl_exec.php"
  [%d]=>
  NULL
  [%d]=>
  NULL
}
--TEST--
trader_cci() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

$high = array(349.77, 352.32, 356.48, 347.84, 343, 339.61, 338.2, 339.74,
342.62, 340.22, 346, 352.06, 354.32, 350.96, 350.88, 349.8, 351.59, 344.6,
342.25, 343.9, 340.43, 340.15, 335.67, 333.73, 336.14, 336, 333.64, 332.23,
337.98, 345.75, 355.13, 353.75, 354.99, 352.35, 349.75, 353.95, 350.47,
349.89, 351.83, 350.95, 350, 349.2, 349.69, 350, 347.12, 346.25, 341.22,
336.14, 341.05, 342.41, 340.95, 335.98, 335.9, 338.56, 336.89, 337.63,
347.83, 352.13, 347.98, 345.33, 347.05, 338.22, 334.8, 333.67, 331.66,
328.31, 333.25, 330.3, 328.68, 329.25, 317.7, 325.8, 328.9, 331.69, 333.15,
333.9, 336.7, 336.37, 336.13, 343.5, 349.83, 354.1, 358, 360, 359.77,
357.68, 360, 361.61, 365, 374.65, 378.65, 396.27, 390.06, 395.05, 400,
404.5, 402.64, 396.99, 395.15, 399.5, 397.9, 393.55, 391.32, 383.5, 367.77,
374.61, 374.65, 375.45, 379.64, 384.97, 383.37, 384.52, 372.65, 367,
364.88, 373.64, 378.96, 375.45, 383.8, 391.5, 391.84, 392.08, 387.34, 378,
380.33, 385.6, 388.61, 386, 380.88, 386.21, 392.21, 393.66, 400.5, 413.23,
422.86, 421.59, 409.82, 406.74, 403.98, 409.25, 403.74, 402.21, 388.89,
382.64, 381.8, 379.82, 384.78, 377.74, 388.81, 403.18, 409.25, 408.43, 422,
426.7, 424.81, 408.42, 400.35, 399.14, 406.5, 406.55, 402.55, 409, 406.35,
409.33, 399.5, 400.44, 403.4, 403.44, 400, 408, 400.89, 397.21, 388.7,
385.25, 389.5, 391.14, 384.58, 379.99, 371.68, 377.93, 375.84, 371.15,
376.72, 378.83, 382.28, 389, 393.63, 396.41, 394.63, 390.94, 395.5, 394.04,
393.9, 395.4, 387.38, 383.74, 384.15, 384.85, 396.1, 397.3, 399.13, 403.59,
409.09, 408.25, 405.65, 406.28, 412.5, 414.68, 418.55, 422.75, 427.75, 426,
422.85, 422.9, 420.45, 425.99, 429.47, 431.37, 427.5, 428.45, 425.1,
454.45, 448.79, 448.48, 453.9, 458.24, 458.99, 457.17, 460, 464.98, 469.75,
476.79, 496.75, 497.62, 503.83, 509.56, 526.29, 504.89, 507.77, 514.85,
515.49, 517.83, 522.9, 528.5, 535.41, 547.61, 548.21, 546.8, 547.48,
533.69, 537.78, 542.99, 547.74, 552, 568.18, 594.72, 600.01, 589.2, 601.77,
606.9, 609.65, 604.5, 601.8, 607.15, 616.28, 621.45, 616.56, 610.56,
618.77, 632.21, 625.86, 634.66, 639.84, 644, 636.87, 631.33, 624.7, 610.28,
610, 620.25, 604.73, 594.62, 576.67, 567.69, 618, 614.69, 606.18, 598.4,
596.76, 587.4, 591.4, 578.36, 572.77, 571.5, 573.98, 575.88, 574.47,
567.51, 563.22, 556.89, 547.5, 543.41, 561.54, 573.88, 572.8, 576.5,
565.85, 574, 579.99, 581.5, 572.65, 567.5, 566.47, 573.85, 577.32, 580.58,
588.5, 576.62, 578.48, 573.5, 574.62, 587.89, 590, 589.25, 588.22, 582.19,
579.8, 574.49, 576.74, 574, 584);

$low = array(344.9, 345, 351.31, 340.1, 326.26, 330.66, 330, 335.26,
339.14, 335.95, 338.86, 347.02, 350.44, 346.06, 347.44, 346.06, 343.3,
338.4, 336, 337.14, 336.03, 333.95, 330.02, 330.2, 332.52, 332.06, 326.8,
320.16, 331.71, 341.5, 348.52, 350.3, 349.35, 347.1, 345.52, 346.67, 345.5,
345.62, 346.88, 346.05, 346.21, 346.53, 346.66, 345.24, 342.27, 340.35,
332.6, 330.73, 336, 338.67, 335.02, 329.42, 331.34, 332.85, 334.43, 334.31,
341, 344.65, 344.3, 342.01, 337.81, 331.9, 330.65, 330.75, 325.51, 325.07,
329.31, 324.88, 318.33, 319.36, 310.5, 315.2, 322.38, 318.12, 325.09,
327.25, 333.44, 331.88, 332.84, 334.2, 342.5, 346.71, 354, 352.2, 352.82,
348.62, 356.38, 356.34, 359.17, 365.28, 373.32, 386, 383.9, 387.75, 389.62,
399.68, 392.15, 388.13, 384, 392.37, 388.35, 382.24, 377.35, 362.57,
353.02, 355, 362.5, 364.72, 374.23, 378.09, 376.06, 378, 361.37, 356,
355.09, 357, 370.6, 365, 370.8, 388, 386.21, 381.86, 380.72, 371.83,
366.48, 382, 382.31, 375.02, 371.9, 380.25, 385.76, 389.9, 395.03, 395.2,
411.19, 412, 396.7, 399.85, 391.3, 398.06, 396.51, 386.21, 381.18, 373.17,
354.24, 360.3, 371.8, 368.49, 378.21, 391.5, 400.14, 402.85, 415.27,
415.94, 415.99, 397.8, 394.21, 390.75, 395.4, 397.38, 393.15, 401.89,
402.51, 401.05, 393.22, 395.11, 395.36, 399.16, 396.13, 401.56, 394.23,
382.15, 380.26, 378.2, 379.45, 384.32, 375.5, 374.88, 365.91, 370.94,
366.88, 363.32, 370.33, 370.2, 378.3, 380.75, 388.58, 390.39, 389.38,
386.76, 390.23, 391.03, 389.45, 387.1, 377.68, 378.31, 379.57, 380.48,
387.26, 392.01, 396.1, 399.49, 403.02, 401.34, 400.51, 403.49, 409, 409.28,
412.67, 419.22, 421.35, 421.5, 419.31, 418.75, 418.66, 422.96, 426.3,
426.51, 419.75, 422.3, 419.55, 443.73, 443.14, 443.77, 445.39, 453.07,
455.55, 453.98, 455.56, 458.2, 464.58, 469.7, 480.56, 488.55, 497.09, 502,
496.89, 486.63, 500.3, 504.12, 509.07, 509.5, 518.64, 516.28, 525.85,
535.7, 538.77, 542.52, 526, 516.22, 523.3, 532.12, 543.11, 547, 555.75,
575.4, 578.55, 578, 589.05, 582, 601.41, 595.53, 594.4, 595.26, 606.06,
610.31, 607.23, 597.94, 600.38, 622.51, 617, 623.4, 625.3, 626, 623.34,
620.5, 603.51, 578.25, 571.91, 602.71, 584.52, 570.42, 556.62, 555, 606,
602.13, 600.5, 583, 581.23, 578.86, 580.3, 565.17, 561.23, 558.73, 560.85,
568.44, 564.35, 557.6, 551.75, 541.04, 530.12, 522.18, 534.05, 552.58,
553.23, 561.23, 558.47, 565.31, 566.56, 571.46, 560.52, 548.5, 558.33,
565.5, 570.5, 569, 570.63, 566.7, 570.38, 567.26, 569.55, 570.37, 583.1,
580.8, 577.44, 575.42, 570.37, 567.33, 571.92, 565.61, 574.25);

$close = array(346.67, 351.99, 353.56, 345.43, 330.01, 334.64, 330.67,
339.3, 341.2, 339.19, 344.97, 351.54, 350.44, 350.96, 348.63, 348.51,
344.56, 341.19, 338.89, 338.04, 338.08, 335.06, 330.8, 332.4, 336.13,
332.42, 327.46, 331.85, 337.86, 342.41, 350.7, 353.01, 350.42, 350.15,
346.75, 350.13, 346.28, 348.2, 349.57, 346.75, 346.66, 347.6, 349.45,
347.23, 346.57, 340.5, 333.3, 336.14, 339.87, 340.53, 335.22, 334.4,
332.19, 336.78, 335, 337.41, 347.83, 345.51, 346.1, 343.44, 338.04, 332.04,
332.24, 331.49, 325.9, 326.6, 332.44, 326.75, 325.16, 320.26, 315.32,
325.3, 322.61, 331.23, 326.35, 332.04, 335.26, 334.04, 335.67, 343.26,
349.43, 351.76, 357.2, 359.71, 354, 353.75, 358.02, 357.77, 364.92, 373.8,
376.85, 386.9, 387.29, 393.3, 398.5, 403.41, 392.59, 391.82, 390.48,
396.75, 388.91, 392.57, 377.37, 373.62, 353.21, 374.01, 363.69, 373.7,
376.99, 383.41, 380.48, 380.44, 366.05, 356.03, 356.44, 373.6, 376.18,
373.72, 383.58, 389.97, 389.99, 384.83, 381.03, 374.05, 379.74, 383.93,
384.14, 377.48, 379.94, 384.62, 389.3, 392.96, 400.5, 411.63, 413.45,
412.14, 401.82, 404.3, 403.17, 399.26, 397.01, 390.57, 381.32, 374.6,
372.5, 378.25, 377.37, 369.8, 388.81, 400.29, 402.19, 408.43, 422, 419.99,
422.24, 398.62, 395.31, 392.87, 405.77, 397.77, 400.6, 404.69, 404.95,
404.78, 396.51, 397.41, 403.07, 400.24, 399.73, 406.23, 395.28, 385.22,
384.62, 379.26, 388.83, 384.77, 377.41, 374.94, 369.01, 376.51, 366.99,
363.57, 376.12, 373.2, 382.2, 387.93, 389.7, 393.01, 390.95, 389.09,
390.66, 393.62, 391.84, 388.81, 380.19, 378.94, 381.02, 382.21, 395.95,
396.45, 398.55, 403.33, 406.53, 402.64, 405.12, 405, 411.23, 413.44,
418.03, 422.4, 421.73, 423.24, 422.55, 421.39, 419.81, 424.7, 429.11,
427.75, 420.3, 427.41, 420.41, 446.66, 444.63, 447.28, 453.01, 456.48,
456.19, 455.12, 459.68, 463.97, 468.83, 476.68, 493.17, 493.42, 502.6,
509.46, 497.67, 502.21, 502.12, 514.85, 513.04, 516.39, 522.41, 525.76,
535.41, 542.44, 544.47, 545.18, 533.16, 530.26, 530.69, 541.99, 545.17,
552, 568.1, 589.58, 585.56, 585.57, 601.1, 605.96, 602.5, 599.34, 596.05,
606.98, 614.48, 617.62, 609.86, 599.55, 618.63, 629.32, 624.31, 633.68,
636.23, 628.44, 626.2, 622.77, 605.23, 580.13, 609.7, 608.34, 587.44,
572.98, 571.7, 560.28, 610, 607.7, 603, 583.98, 582.13, 585.98, 581.82,
565.25, 569.48, 568.18, 569.18, 570.52, 566.71, 558.22, 553.17, 546.08,
530.12, 530.38, 561.28, 556.97, 570.56, 565.32, 562.29, 572.27, 579.17,
577.73, 560.99, 564.29, 562.83, 571.46, 571.72, 580.32, 571.17, 576.16,
572.16, 571.53, 574.13, 585.78, 587.41, 585.74, 577.67, 582.1, 570.77,
572.03, 574.5, 569.05, 584);

$volume = array(18138800, 16824200, 15587600, 25751700, 41312500, 23550700,
26900300, 14621000, 11651100, 13321200, 14453900, 16041800, 11048200,
12603500, 11764400, 9798800, 14952200, 16431500, 17248600, 14376300,
13337300, 13483300, 14255300, 15232400, 12372700, 10785300, 16208300,
21782000, 14977700, 25023400, 26921300, 9519400, 12057200, 12721800,
12899500, 35940800, 15811100, 11198600, 13901700, 12009300, 10008700,
7312500, 10074500, 12002600, 11462700, 11649700, 16076400, 16170900,
11956100, 9327300, 12078200, 13661000, 11502900, 10507900, 7953300,
7273200, 14919100, 19810000, 12103000, 11194300, 16497800, 18927500,
11924500, 9834400, 15504200, 11773400, 11948800, 14264500, 18235300,
21981800, 22880100, 17620500, 13949300, 19991300, 15711600, 12141400,
10510700, 12597000, 11543900, 15546800, 12688300, 15879400, 14273600,
17497300, 15816200, 16128800, 13987000, 15376100, 17302300, 20451000,
29255100, 33618800, 18804100, 18454500, 21064400, 17020700, 23547200,
21214800, 22592200, 21886800, 22840600, 26160800, 31121600, 43020000,
40850100, 38663600, 31380300, 26498700, 18891900, 16447900, 17817400,
15787800, 30408300, 27710000, 19118000, 23458300, 22366700, 31117800,
22909800, 14473300, 14925700, 18669800, 12275800, 15684500, 18203400,
12520500, 14862700, 20181300, 16708200, 15740600, 19097200, 14922000,
24946000, 29423500, 27705300, 21641900, 34588500, 19517200, 29031200,
22589100, 15351800, 23263000, 19579800, 23895500, 44059800, 28088100,
29020700, 19129100, 15804000, 21631400, 22224400, 15220800, 20477300,
24501500, 31485700, 39428200, 19626000, 22187200, 17941200, 15378600,
16296400, 17673300, 11529900, 13772300, 18992400, 11723300, 15768700,
10793800, 9652200, 14301400, 19952900, 26606400, 23349400, 15466500,
15392100, 12471700, 17147100, 13288300, 16007200, 14617700, 15308600,
9098500, 12380100, 13429600, 14502300, 13827800, 13545400, 12763100,
10135800, 10892800, 13441200, 10612200, 10752300, 12112000, 14541200,
9158800, 15056300, 8411700, 12050100, 9390900, 7227000, 9628800, 9472600,
8173400, 7719800, 6420500, 10794900, 9294400, 9688100, 11370900, 14072200,
9225900, 7685400, 7597200, 8077100, 8674800, 9885300, 9347700, 14784600,
10930700, 19558400, 34223600, 11579600, 10710200, 13547400, 13996800,
9644300, 6671200, 10245200, 8917200, 11293600, 14567000, 31579000,
22546400, 18471600, 16497500, 53789700, 33733900, 19135300, 21628000,
17260500, 20286600, 14831400, 19556400, 21442300, 34000000, 24401800,
15418200, 28897100, 28937000, 28501300, 18444300, 14960600, 14545700,
24673200, 50672800, 41416800, 29481600, 32186900, 29166700, 23001400,
22290400, 15374500, 21276300, 21683100, 23409200, 21722700, 26108400,
21369400, 29805400, 20463500, 22902700, 21340500, 31774600, 24878900,
21940300, 30701500, 37528000, 36624400, 34090300, 29811100, 36820500,
34518400, 38442800, 32346800, 19145100, 14527500, 18076400, 21821300,
15272200, 13948100, 18988500, 16551800, 17941000, 17167900, 12179900,
14269400, 12771600, 17010900, 20031900, 25614900, 26153100, 22538900,
24813800, 20889100, 17721300, 11730900, 13589400, 18907800, 17568200,
18606400, 19892400, 13864700, 14325100, 13565300, 12395200, 21116500,
15556400, 10491800, 12351400, 11973300, 15728900, 12907200, 12827000,
11660800, 10169400, 10869800, 9883900, 7252100, 10108600, 15051400);

var_dump(trader_adosc($high, $low, $close, $volume));




--EXPECT--
array(330) {
  [1]=>
  float(0)
  [2]=>
  float(0)
  [3]=>
  float(0)
  [4]=>
  float(0)
  [5]=>
  float(0)
  [6]=>
  float(0)
  [7]=>
  float(0)
  [8]=>
  float(0)
  [9]=>
  float(0)
  [10]=>
  float(0)
  [11]=>
  float(0)
  [12]=>
  float(0)
  [13]=>
  float(0)
  [14]=>
  float(0)
  [15]=>
  float(0)
  [16]=>
  float(0)
  [17]=>
  float(0)
  [18]=>
  float(0)
  [19]=>
  float(0)
  [20]=>
  float(0)
  [21]=>
  float(0)
  [22]=>
  float(0)
  [23]=>
  float(0)
  [24]=>
  float(0)
  [25]=>
  float(0)
  [26]=>
  float(0)
  [27]=>
  float(0)
  [28]=>
  float(0)
  [29]=>
  float(0)
  [30]=>
  float(0)
  [31]=>
  float(0)
  [32]=>
  float(0)
  [33]=>
  float(0)
  [34]=>
  float(0)
  [35]=>
  float(0)
  [36]=>
  float(0)
  [37]=>
  float(0)
  [38]=>
  float(0)
  [39]=>
  float(0)
  [40]=>
  float(0)
  [41]=>
  float(0)
  [42]=>
  float(0)
  [43]=>
  float(0)
  [44]=>
  float(0)
  [45]=>
  float(0)
  [46]=>
  float(0)
  [47]=>
  float(0)
  [48]=>
  float(0)
  [49]=>
  float(0)
  [50]=>
  float(0)
  [51]=>
  float(0)
  [52]=>
  float(0)
  [53]=>
  float(0)
  [54]=>
  float(0)
  [55]=>
  float(0)
  [56]=>
  float(0)
  [57]=>
  float(0)
  [58]=>
  float(0)
  [59]=>
  float(0)
  [60]=>
  float(0)
  [61]=>
  float(0)
  [62]=>
  float(0)
  [63]=>
  float(0)
  [64]=>
  float(0)
  [65]=>
  float(0)
  [66]=>
  float(0)
  [67]=>
  float(0)
  [68]=>
  float(0)
  [69]=>
  float(0)
  [70]=>
  float(0)
  [71]=>
  float(0)
  [72]=>
  float(0)
  [73]=>
  float(0)
  [74]=>
  float(0)
  [75]=>
  float(0)
  [76]=>
  float(0)
  [77]=>
  float(0)
  [78]=>
  float(0)
  [79]=>
  float(0)
  [80]=>
  float(0)
  [81]=>
  float(0)
  [82]=>
  float(0)
  [83]=>
  float(0)
  [84]=>
  float(0)
  [85]=>
  float(0)
  [86]=>
  float(0)
  [87]=>
  float(0)
  [88]=>
  float(0)
  [89]=>
  float(0)
  [90]=>
  float(0)
  [91]=>
  float(0)
  [92]=>
  float(0)
  [93]=>
  float(0)
  [94]=>
  float(0)
  [95]=>
  float(0)
  [96]=>
  float(0)
  [97]=>
  float(0)
  [98]=>
  float(0)
  [99]=>
  float(0)
  [100]=>
  float(0)
  [101]=>
  float(0)
  [102]=>
  float(0)
  [103]=>
  float(0)
  [104]=>
  float(0)
  [105]=>
  float(0)
  [106]=>
  float(0)
  [107]=>
  float(0)
  [108]=>
  float(0)
  [109]=>
  float(0)
  [110]=>
  float(0)
  [111]=>
  float(0)
  [112]=>
  float(0)
  [113]=>
  float(0)
  [114]=>
  float(0)
  [115]=>
  float(0)
  [116]=>
  float(0)
  [117]=>
  float(0)
  [118]=>
  float(0)
  [119]=>
  float(0)
  [120]=>
  float(0)
  [121]=>
  float(0)
  [122]=>
  float(0)
  [123]=>
  float(0)
  [124]=>
  float(0)
  [125]=>
  float(0)
  [126]=>
  float(0)
  [127]=>
  float(0)
  [128]=>
  float(0)
  [129]=>
  float(0)
  [130]=>
  float(0)
  [131]=>
  float(0)
  [132]=>
  float(0)
  [133]=>
  float(0)
  [134]=>
  float(0)
  [135]=>
  float(0)
  [136]=>
  float(0)
  [137]=>
  float(0)
  [138]=>
  float(0)
  [139]=>
  float(0)
  [140]=>
  float(0)
  [141]=>
  float(0)
  [142]=>
  float(0)
  [143]=>
  float(0)
  [144]=>
  float(0)
  [145]=>
  float(0)
  [146]=>
  float(0)
  [147]=>
  float(0)
  [148]=>
  float(0)
  [149]=>
  float(0)
  [150]=>
  float(0)
  [151]=>
  float(0)
  [152]=>
  float(0)
  [153]=>
  float(0)
  [154]=>
  float(0)
  [155]=>
  float(0)
  [156]=>
  float(0)
  [157]=>
  float(0)
  [158]=>
  float(0)
  [159]=>
  float(0)
  [160]=>
  float(0)
  [161]=>
  float(0)
  [162]=>
  float(0)
  [163]=>
  float(0)
  [164]=>
  float(0)
  [165]=>
  float(0)
  [166]=>
  float(0)
  [167]=>
  float(0)
  [168]=>
  float(0)
  [169]=>
  float(0)
  [170]=>
  float(0)
  [171]=>
  float(0)
  [172]=>
  float(0)
  [173]=>
  float(0)
  [174]=>
  float(0)
  [175]=>
  float(0)
  [176]=>
  float(0)
  [177]=>
  float(0)
  [178]=>
  float(0)
  [179]=>
  float(0)
  [180]=>
  float(0)
  [181]=>
  float(0)
  [182]=>
  float(0)
  [183]=>
  float(0)
  [184]=>
  float(0)
  [185]=>
  float(0)
  [186]=>
  float(0)
  [187]=>
  float(0)
  [188]=>
  float(0)
  [189]=>
  float(0)
  [190]=>
  float(0)
  [191]=>
  float(0)
  [192]=>
  float(0)
  [193]=>
  float(0)
  [194]=>
  float(0)
  [195]=>
  float(0)
  [196]=>
  float(0)
  [197]=>
  float(0)
  [198]=>
  float(0)
  [199]=>
  float(0)
  [200]=>
  float(0)
  [201]=>
  float(0)
  [202]=>
  float(0)
  [203]=>
  float(0)
  [204]=>
  float(0)
  [205]=>
  float(0)
  [206]=>
  float(0)
  [207]=>
  float(0)
  [208]=>
  float(0)
  [209]=>
  float(0)
  [210]=>
  float(0)
  [211]=>
  float(0)
  [212]=>
  float(0)
  [213]=>
  float(0)
  [214]=>
  float(0)
  [215]=>
  float(0)
  [216]=>
  float(0)
  [217]=>
  float(0)
  [218]=>
  float(0)
  [219]=>
  float(0)
  [220]=>
  float(0)
  [221]=>
  float(0)
  [222]=>
  float(0)
  [223]=>
  float(0)
  [224]=>
  float(0)
  [225]=>
  float(0)
  [226]=>
  float(0)
  [227]=>
  float(0)
  [228]=>
  float(0)
  [229]=>
  float(0)
  [230]=>
  float(0)
  [231]=>
  float(0)
  [232]=>
  float(0)
  [233]=>
  float(0)
  [234]=>
  float(0)
  [235]=>
  float(0)
  [236]=>
  float(0)
  [237]=>
  float(0)
  [238]=>
  float(0)
  [239]=>
  float(0)
  [240]=>
  float(0)
  [241]=>
  float(0)
  [242]=>
  float(0)
  [243]=>
  float(0)
  [244]=>
  float(0)
  [245]=>
  float(0)
  [246]=>
  float(0)
  [247]=>
  float(0)
  [248]=>
  float(0)
  [249]=>
  float(0)
  [250]=>
  float(0)
  [251]=>
  float(0)
  [252]=>
  float(0)
  [253]=>
  float(0)
  [254]=>
  float(0)
  [255]=>
  float(0)
  [256]=>
  float(0)
  [257]=>
  float(0)
  [258]=>
  float(0)
  [259]=>
  float(0)
  [260]=>
  float(0)
  [261]=>
  float(0)
  [262]=>
  float(0)
  [263]=>
  float(0)
  [264]=>
  float(0)
  [265]=>
  float(0)
  [266]=>
  float(0)
  [267]=>
  float(0)
  [268]=>
  float(0)
  [269]=>
  float(0)
  [270]=>
  float(0)
  [271]=>
  float(0)
  [272]=>
  float(0)
  [273]=>
  float(0)
  [274]=>
  float(0)
  [275]=>
  float(0)
  [276]=>
  float(0)
  [277]=>
  float(0)
  [278]=>
  float(0)
  [279]=>
  float(0)
  [280]=>
  float(0)
  [281]=>
  float(0)
  [282]=>
  float(0)
  [283]=>
  float(0)
  [284]=>
  float(0)
  [285]=>
  float(0)
  [286]=>
  float(0)
  [287]=>
  float(0)
  [288]=>
  float(0)
  [289]=>
  float(0)
  [290]=>
  float(0)
  [291]=>
  float(0)
  [292]=>
  float(0)
  [293]=>
  float(0)
  [294]=>
  float(0)
  [295]=>
  float(0)
  [296]=>
  float(0)
  [297]=>
  float(0)
  [298]=>
  float(0)
  [299]=>
  float(0)
  [300]=>
  float(0)
  [301]=>
  float(0)
  [302]=>
  float(0)
  [303]=>
  float(0)
  [304]=>
  float(0)
  [305]=>
  float(0)
  [306]=>
  float(0)
  [307]=>
  float(0)
  [308]=>
  float(0)
  [309]=>
  float(0)
  [310]=>
  float(0)
  [311]=>
  float(0)
  [312]=>
  float(0)
  [313]=>
  float(0)
  [314]=>
  float(0)
  [315]=>
  float(0)
  [316]=>
  float(0)
  [317]=>
  float(0)
  [318]=>
  float(0)
  [319]=>
  float(0)
  [320]=>
  float(0)
  [321]=>
  float(0)
  [322]=>
  float(0)
  [323]=>
  float(0)
  [324]=>
  float(0)
  [325]=>
  float(0)
  [326]=>
  float(0)
  [327]=>
  float(0)
  [328]=>
  float(0)
  [329]=>
  float(0)
  [330]=>
  float(0)
}--TEST--
trader_aroonosc() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

$period = 14;

var_dump(trader_aroonosc(get_data("high", $data0), get_data("low", $data0), $period));

--EXPECT--
array(238) {
  [14]=>
  float(-21.429)
  [15]=>
  float(-21.429)
  [16]=>
  float(-21.429)
  [17]=>
  float(-21.429)
  [18]=>
  float(-21.429)
  [19]=>
  float(-21.429)
  [20]=>
  float(-21.429)
  [21]=>
  float(-71.429)
  [22]=>
  float(-78.571)
  [23]=>
  float(-85.714)
  [24]=>
  float(-92.857)
  [25]=>
  float(-100)
  [26]=>
  float(-92.857)
  [27]=>
  float(-64.286)
  [28]=>
  float(-64.286)
  [29]=>
  float(-64.286)
  [30]=>
  float(-64.286)
  [31]=>
  float(-42.857)
  [32]=>
  float(-42.857)
  [33]=>
  float(-42.857)
  [34]=>
  float(-35.714)
  [35]=>
  float(64.286)
  [36]=>
  float(64.286)
  [37]=>
  float(64.286)
  [38]=>
  float(64.286)
  [39]=>
  float(64.286)
  [40]=>
  float(57.143)
  [41]=>
  float(-42.857)
  [42]=>
  float(-42.857)
  [43]=>
  float(21.429)
  [44]=>
  float(28.571)
  [45]=>
  float(28.571)
  [46]=>
  float(42.857)
  [47]=>
  float(42.857)
  [48]=>
  float(42.857)
  [49]=>
  float(42.857)
  [50]=>
  float(42.857)
  [51]=>
  float(42.857)
  [52]=>
  float(42.857)
  [53]=>
  float(42.857)
  [54]=>
  float(-57.143)
  [55]=>
  float(-57.143)
  [56]=>
  float(-57.143)
  [57]=>
  float(-57.143)
  [58]=>
  float(-57.143)
  [59]=>
  float(-57.143)
  [60]=>
  float(-57.143)
  [61]=>
  float(-35.714)
  [62]=>
  float(57.143)
  [63]=>
  float(64.286)
  [64]=>
  float(71.429)
  [65]=>
  float(78.571)
  [66]=>
  float(85.714)
  [67]=>
  float(85.714)
  [68]=>
  float(85.714)
  [69]=>
  float(78.571)
  [70]=>
  float(71.429)
  [71]=>
  float(-35.714)
  [72]=>
  float(-42.857)
  [73]=>
  float(-50)
  [74]=>
  float(-50)
  [75]=>
  float(14.286)
  [76]=>
  float(21.429)
  [77]=>
  float(28.571)
  [78]=>
  float(35.714)
  [79]=>
  float(35.714)
  [80]=>
  float(35.714)
  [81]=>
  float(35.714)
  [82]=>
  float(35.714)
  [83]=>
  float(71.429)
  [84]=>
  float(71.429)
  [85]=>
  float(71.429)
  [86]=>
  float(92.857)
  [87]=>
  float(100)
  [88]=>
  float(100)
  [89]=>
  float(100)
  [90]=>
  float(100)
  [91]=>
  float(92.857)
  [92]=>
  float(64.286)
  [93]=>
  float(64.286)
  [94]=>
  float(64.286)
  [95]=>
  float(64.286)
  [96]=>
  float(57.143)
  [97]=>
  float(42.857)
  [98]=>
  float(42.857)
  [99]=>
  float(35.714)
  [100]=>
  float(28.571)
  [101]=>
  float(7.143)
  [102]=>
  float(7.143)
  [103]=>
  float(7.143)
  [104]=>
  float(-92.857)
  [105]=>
  float(-85.714)
  [106]=>
  float(21.429)
  [107]=>
  float(21.429)
  [108]=>
  float(21.429)
  [109]=>
  float(21.429)
  [110]=>
  float(21.429)
  [111]=>
  float(21.429)
  [112]=>
  float(21.429)
  [113]=>
  float(21.429)
  [114]=>
  float(78.571)
  [115]=>
  float(78.571)
  [116]=>
  float(92.857)
  [117]=>
  float(100)
  [118]=>
  float(92.857)
  [119]=>
  float(85.714)
  [120]=>
  float(50)
  [121]=>
  float(50)
  [122]=>
  float(50)
  [123]=>
  float(92.857)
  [124]=>
  float(92.857)
  [125]=>
  float(100)
  [126]=>
  float(100)
  [127]=>
  float(92.857)
  [128]=>
  float(100)
  [129]=>
  float(100)
  [130]=>
  float(78.571)
  [131]=>
  float(85.714)
  [132]=>
  float(85.714)
  [133]=>
  float(85.714)
  [134]=>
  float(71.429)
  [135]=>
  float(71.429)
  [136]=>
  float(64.286)
  [137]=>
  float(57.143)
  [138]=>
  float(-50)
  [139]=>
  float(-57.143)
  [140]=>
  float(-57.143)
  [141]=>
  float(-57.143)
  [142]=>
  float(-57.143)
  [143]=>
  float(-57.143)
  [144]=>
  float(-57.143)
  [145]=>
  float(-100)
  [146]=>
  float(-78.571)
  [147]=>
  float(-85.714)
  [148]=>
  float(-92.857)
  [149]=>
  float(-92.857)
  [150]=>
  float(-85.714)
  [151]=>
  float(-78.571)
  [152]=>
  float(-42.857)
  [153]=>
  float(-42.857)
  [154]=>
  float(-42.857)
  [155]=>
  float(-42.857)
  [156]=>
  float(-42.857)
  [157]=>
  float(64.286)
  [158]=>
  float(64.286)
  [159]=>
  float(64.286)
  [160]=>
  float(64.286)
  [161]=>
  float(64.286)
  [162]=>
  float(64.286)
  [163]=>
  float(42.857)
  [164]=>
  float(42.857)
  [165]=>
  float(42.857)
  [166]=>
  float(35.714)
  [167]=>
  float(-35.714)
  [168]=>
  float(-35.714)
  [169]=>
  float(50)
  [170]=>
  float(57.143)
  [171]=>
  float(64.286)
  [172]=>
  float(71.429)
  [173]=>
  float(78.571)
  [174]=>
  float(78.571)
  [175]=>
  float(78.571)
  [176]=>
  float(78.571)
  [177]=>
  float(71.429)
  [178]=>
  float(57.143)
  [179]=>
  float(57.143)
  [180]=>
  float(50)
  [181]=>
  float(-35.714)
  [182]=>
  float(-64.286)
  [183]=>
  float(-71.429)
  [184]=>
  float(-71.429)
  [185]=>
  float(-71.429)
  [186]=>
  float(-92.857)
  [187]=>
  float(-100)
  [188]=>
  float(-100)
  [189]=>
  float(-85.714)
  [190]=>
  float(-85.714)
  [191]=>
  float(-78.571)
  [192]=>
  float(-100)
  [193]=>
  float(-100)
  [194]=>
  float(-92.857)
  [195]=>
  float(-92.857)
  [196]=>
  float(-100)
  [197]=>
  float(-92.857)
  [198]=>
  float(-100)
  [199]=>
  float(-92.857)
  [200]=>
  float(-57.143)
  [201]=>
  float(-57.143)
  [202]=>
  float(-85.714)
  [203]=>
  float(-85.714)
  [204]=>
  float(-85.714)
  [205]=>
  float(-78.571)
  [206]=>
  float(-71.429)
  [207]=>
  float(-57.143)
  [208]=>
  float(-57.143)
  [209]=>
  float(-50)
  [210]=>
  float(-7.143)
  [211]=>
  float(-7.143)
  [212]=>
  float(-7.143)
  [213]=>
  float(-7.143)
  [214]=>
  float(-7.143)
  [215]=>
  float(-7.143)
  [216]=>
  float(42.857)
  [217]=>
  float(-28.571)
  [218]=>
  float(-28.571)
  [219]=>
  float(-28.571)
  [220]=>
  float(-28.571)
  [221]=>
  float(-28.571)
  [222]=>
  float(-28.571)
  [223]=>
  float(78.571)
  [224]=>
  float(85.714)
  [225]=>
  float(92.857)
  [226]=>
  float(92.857)
  [227]=>
  float(85.714)
  [228]=>
  float(78.571)
  [229]=>
  float(71.429)
  [230]=>
  float(28.571)
  [231]=>
  float(28.571)
  [232]=>
  float(78.571)
  [233]=>
  float(85.714)
  [234]=>
  float(92.857)
  [235]=>
  float(100)
  [236]=>
  float(100)
  [237]=>
  float(92.857)
  [238]=>
  float(71.429)
  [239]=>
  float(71.429)
  [240]=>
  float(71.429)
  [241]=>
  float(50)
  [242]=>
  float(50)
  [243]=>
  float(50)
  [244]=>
  float(42.857)
  [245]=>
  float(35.714)
  [246]=>
  float(-28.571)
  [247]=>
  float(-28.571)
  [248]=>
  float(-28.571)
  [249]=>
  float(-28.571)
  [250]=>
  float(-28.571)
  [251]=>
  float(-14.286)
}--TEST--
trader_obv() Bug #62712 trader_obv does not return results
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

$price = array(568.1, 589.58, 585.56, 585.57, 601.1, 605.96, 602.5, 599.34, 596.05, 606.98, 614.48, 617.62, 609.86, 599.55, 618.63, 629.32, 624.31, 633.68, 636.23, 628.44, 626.2, 622.77, 605.23, 580.13, 609.7, 608.34, 587.44, 572.98, 571.7, 560.28, 610, 607.7, 603, 583.98, 582.13, 585.98, 581.82, 565.25, 569.48, 568.18, 569.18, 570.52, 566.71, 558.22, 553.17, 546.08, 530.12, 530.38, 561.28, 556.97, 570.56, 565.32, 562.29, 572.27, 579.17, 577.73, 560.99, 564.29, 562.83, 571.46, 571.72, 580.32, 571.17, 576.16, 572.16, 571.53, 574.13, 585.78, 587.41, 585.74, 577.67, 582.1, 570.77, 572.03, 574.5, 569.05, 584);

$volume = array(24673200, 50672800, 41416800, 29481600, 32186900, 29166700, 23001400, 22290400, 15374500, 21276300, 21683100, 23409200, 21722700, 26108400, 21369400, 29805400, 20463500, 22902700, 21340500, 31774600, 24878900, 21940300, 30701500, 37528000, 36624400, 34090300, 29811100, 36820500, 34518400, 38442800, 32346800, 19145100, 14527500, 18076400, 21821300, 15272200, 13948100, 18988500, 16551800, 17941000, 17167900, 12179900, 14269400, 12771600, 17010900, 20031900, 25614900, 26153100, 22538900, 24813800, 20889100, 17721300, 11730900, 13589400, 18907800, 17568200, 18606400, 19892400, 13864700, 14325100, 13565300, 12395200, 21116500, 15556400, 10491800, 12351400, 11973300, 15728900, 12907200, 12827000, 11660800, 10169400, 10869800, 9883900, 7252100, 10108600, 15051400);

var_dump(trader_obv($price, $volume));
--EXPECT--
array(77) {
  [0]=>
  float(24673200)
  [1]=>
  float(75346000)
  [2]=>
  float(33929200)
  [3]=>
  float(63410800)
  [4]=>
  float(95597700)
  [5]=>
  float(124764400)
  [6]=>
  float(101763000)
  [7]=>
  float(79472600)
  [8]=>
  float(64098100)
  [9]=>
  float(85374400)
  [10]=>
  float(107057500)
  [11]=>
  float(130466700)
  [12]=>
  float(108744000)
  [13]=>
  float(82635600)
  [14]=>
  float(104005000)
  [15]=>
  float(133810400)
  [16]=>
  float(113346900)
  [17]=>
  float(136249600)
  [18]=>
  float(157590100)
  [19]=>
  float(125815500)
  [20]=>
  float(100936600)
  [21]=>
  float(78996300)
  [22]=>
  float(48294800)
  [23]=>
  float(10766800)
  [24]=>
  float(47391200)
  [25]=>
  float(13300900)
  [26]=>
  float(-16510200)
  [27]=>
  float(-53330700)
  [28]=>
  float(-87849100)
  [29]=>
  float(-126291900)
  [30]=>
  float(-93945100)
  [31]=>
  float(-113090200)
  [32]=>
  float(-127617700)
  [33]=>
  float(-145694100)
  [34]=>
  float(-167515400)
  [35]=>
  float(-152243200)
  [36]=>
  float(-166191300)
  [37]=>
  float(-185179800)
  [38]=>
  float(-168628000)
  [39]=>
  float(-186569000)
  [40]=>
  float(-169401100)
  [41]=>
  float(-157221200)
  [42]=>
  float(-171490600)
  [43]=>
  float(-184262200)
  [44]=>
  float(-201273100)
  [45]=>
  float(-221305000)
  [46]=>
  float(-246919900)
  [47]=>
  float(-220766800)
  [48]=>
  float(-198227900)
  [49]=>
  float(-223041700)
  [50]=>
  float(-202152600)
  [51]=>
  float(-219873900)
  [52]=>
  float(-231604800)
  [53]=>
  float(-218015400)
  [54]=>
  float(-199107600)
  [55]=>
  float(-216675800)
  [56]=>
  float(-235282200)
  [57]=>
  float(-215389800)
  [58]=>
  float(-229254500)
  [59]=>
  float(-214929400)
  [60]=>
  float(-201364100)
  [61]=>
  float(-188968900)
  [62]=>
  float(-210085400)
  [63]=>
  float(-194529000)
  [64]=>
  float(-205020800)
  [65]=>
  float(-217372200)
  [66]=>
  float(-205398900)
  [67]=>
  float(-189670000)
  [68]=>
  float(-176762800)
  [69]=>
  float(-189589800)
  [70]=>
  float(-201250600)
  [71]=>
  float(-191081200)
  [72]=>
  float(-201951000)
  [73]=>
  float(-192067100)
  [74]=>
  float(-184815000)
  [75]=>
  float(-194923600)
  [76]=>
  float(-179872200)
}
--TEST--
trader_beta() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--INI--
trader.real_precision=7
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

$period = 14;

var_dump(trader_beta(
	get_data("open", $data0),
	get_data("close", $data0),
	$period
));


--EXPECT--
array(238) {
  [14]=>
  float(0.5640901)
  [15]=>
  float(0.6176894)
  [16]=>
  float(0.647266)
  [17]=>
  float(0.5634707)
  [18]=>
  float(0.6032041)
  [19]=>
  float(0.4989228)
  [20]=>
  float(0.5164846)
  [21]=>
  float(0.578517)
  [22]=>
  float(0.5954466)
  [23]=>
  float(0.6085057)
  [24]=>
  float(0.4928167)
  [25]=>
  float(0.4778817)
  [26]=>
  float(0.3399169)
  [27]=>
  float(0.1831509)
  [28]=>
  float(0.0375991)
  [29]=>
  float(0.0088297)
  [30]=>
  float(0.1076141)
  [31]=>
  float(0.177433)
  [32]=>
  float(0.1576907)
  [33]=>
  float(0.2150506)
  [34]=>
  float(0.1208925)
  [35]=>
  float(0.1146727)
  [36]=>
  float(0.0935894)
  [37]=>
  float(0.0402434)
  [38]=>
  float(0.0674557)
  [39]=>
  float(0.0585618)
  [40]=>
  float(0.2357384)
  [41]=>
  float(-0.0569993)
  [42]=>
  float(0.2050508)
  [43]=>
  float(0.1721791)
  [44]=>
  float(0.113951)
  [45]=>
  float(0.0824338)
  [46]=>
  float(0.1320092)
  [47]=>
  float(0.3013454)
  [48]=>
  float(0.2705118)
  [49]=>
  float(0.1911424)
  [50]=>
  float(0.3187994)
  [51]=>
  float(0.2536405)
  [52]=>
  float(0.3671545)
  [53]=>
  float(0.301142)
  [54]=>
  float(0.3086067)
  [55]=>
  float(0.2235905)
  [56]=>
  float(0.2255197)
  [57]=>
  float(0.2252969)
  [58]=>
  float(0.3515239)
  [59]=>
  float(0.3702044)
  [60]=>
  float(0.3127746)
  [61]=>
  float(0.3185282)
  [62]=>
  float(0.5097706)
  [63]=>
  float(0.4723443)
  [64]=>
  float(0.4468791)
  [65]=>
  float(0.4386478)
  [66]=>
  float(0.3469897)
  [67]=>
  float(0.4889382)
  [68]=>
  float(0.466776)
  [69]=>
  float(0.4865985)
  [70]=>
  float(0.5200594)
  [71]=>
  float(0.7540296)
  [72]=>
  float(0.5286858)
  [73]=>
  float(0.3475307)
  [74]=>
  float(0.4644573)
  [75]=>
  float(0.7701524)
  [76]=>
  float(0.7304895)
  [77]=>
  float(0.750161)
  [78]=>
  float(0.7374349)
  [79]=>
  float(0.7548355)
  [80]=>
  float(0.7421117)
  [81]=>
  float(0.7381196)
  [82]=>
  float(0.7280508)
  [83]=>
  float(0.7203308)
  [84]=>
  float(0.7211881)
  [85]=>
  float(0.6999357)
  [86]=>
  float(0.675812)
  [87]=>
  float(0.7064777)
  [88]=>
  float(0.7067973)
  [89]=>
  float(0.4016434)
  [90]=>
  float(0.8660754)
  [91]=>
  float(0.6977567)
  [92]=>
  float(0.7319513)
  [93]=>
  float(0.6322256)
  [94]=>
  float(0.7081928)
  [95]=>
  float(0.7263628)
  [96]=>
  float(0.7656208)
  [97]=>
  float(0.8637374)
  [98]=>
  float(0.7696131)
  [99]=>
  float(0.7455733)
  [100]=>
  float(0.5284135)
  [101]=>
  float(0.5530569)
  [102]=>
  float(0.6158166)
  [103]=>
  float(0.5644772)
  [104]=>
  float(-0.0341363)
  [105]=>
  float(0.0767759)
  [106]=>
  float(0.2793557)
  [107]=>
  float(0.2020865)
  [108]=>
  float(0.169488)
  [109]=>
  float(0.1651134)
  [110]=>
  float(0.1576619)
  [111]=>
  float(0.1248117)
  [112]=>
  float(0.0633706)
  [113]=>
  float(0.1794419)
  [114]=>
  float(0.4455895)
  [115]=>
  float(0.4457711)
  [116]=>
  float(0.3622616)
  [117]=>
  float(0.457566)
  [118]=>
  float(0.5706041)
  [119]=>
  float(0.6756552)
  [120]=>
  float(0.4958334)
  [121]=>
  float(0.6982086)
  [122]=>
  float(0.9522238)
  [123]=>
  float(1.0137788)
  [124]=>
  float(0.571722)
  [125]=>
  float(0.5721469)
  [126]=>
  float(0.5613365)
  [127]=>
  float(0.3186605)
  [128]=>
  float(0.2818384)
  [129]=>
  float(0.3038015)
  [130]=>
  float(0.1233051)
  [131]=>
  float(0.1583115)
  [132]=>
  float(0.0374872)
  [133]=>
  float(0.0863134)
  [134]=>
  float(0.1200959)
  [135]=>
  float(0.1500685)
  [136]=>
  float(0.5907164)
  [137]=>
  float(0.3606438)
  [138]=>
  float(0.3490484)
  [139]=>
  float(0.2162318)
  [140]=>
  float(0.2467822)
  [141]=>
  float(0.3648577)
  [142]=>
  float(0.3890231)
  [143]=>
  float(0.2948789)
  [144]=>
  float(0.2975286)
  [145]=>
  float(0.3598729)
  [146]=>
  float(0.4193189)
  [147]=>
  float(0.3831274)
  [148]=>
  float(0.5275548)
  [149]=>
  float(0.5241456)
  [150]=>
  float(0.1874182)
  [151]=>
  float(0.4665016)
  [152]=>
  float(0.4209278)
  [153]=>
  float(0.2590932)
  [154]=>
  float(0.189576)
  [155]=>
  float(0.2702586)
  [156]=>
  float(0.2403041)
  [157]=>
  float(0.2477126)
  [158]=>
  float(0.2346237)
  [159]=>
  float(0.1531943)
  [160]=>
  float(0.0421213)
  [161]=>
  float(-0.0271231)
  [162]=>
  float(-0.0169856)
  [163]=>
  float(-0.023132)
  [164]=>
  float(0.0426958)
  [165]=>
  float(-0.0518835)
  [166]=>
  float(0.0504552)
  [167]=>
  float(0.2829931)
  [168]=>
  float(0.3155871)
  [169]=>
  float(0.2555225)
  [170]=>
  float(0.2753199)
  [171]=>
  float(0.1233534)
  [172]=>
  float(-0.0351474)
  [173]=>
  float(-0.1070788)
  [174]=>
  float(0.2933848)
  [175]=>
  float(0.2189129)
  [176]=>
  float(0.1688022)
  [177]=>
  float(0.2633021)
  [178]=>
  float(0.3504193)
  [179]=>
  float(-0.058096)
  [180]=>
  float(-0.1328319)
  [181]=>
  float(-0.1212916)
  [182]=>
  float(-0.1181816)
  [183]=>
  float(-0.3147704)
  [184]=>
  float(-0.3119912)
  [185]=>
  float(-0.3169708)
  [186]=>
  float(-0.3589015)
  [187]=>
  float(-0.4958777)
  [188]=>
  float(-0.5371221)
  [189]=>
  float(-0.5584503)
  [190]=>
  float(-0.3823665)
  [191]=>
  float(-0.405602)
  [192]=>
  float(-0.3515963)
  [193]=>
  float(-0.170502)
  [194]=>
  float(-0.1510721)
  [195]=>
  float(-0.1895076)
  [196]=>
  float(-0.097325)
  [197]=>
  float(-0.0245408)
  [198]=>
  float(0.0668837)
  [199]=>
  float(0.1159564)
  [200]=>
  float(0.1209802)
  [201]=>
  float(0.1390153)
  [202]=>
  float(0.8256553)
  [203]=>
  float(0.8704439)
  [204]=>
  float(0.8890459)
  [205]=>
  float(0.9241878)
  [206]=>
  float(0.8910635)
  [207]=>
  float(0.9027412)
  [208]=>
  float(0.9221556)
  [209]=>
  float(0.915256)
  [210]=>
  float(0.9004526)
  [211]=>
  float(0.9755993)
  [212]=>
  float(0.9768674)
  [213]=>
  float(0.9962859)
  [214]=>
  float(0.9555013)
  [215]=>
  float(0.8453584)
  [216]=>
  float(0.0635361)
  [217]=>
  float(-0.0827443)
  [218]=>
  float(-0.099231)
  [219]=>
  float(-0.1097099)
  [220]=>
  float(-0.0936401)
  [221]=>
  float(-0.0655165)
  [222]=>
  float(-0.3069838)
  [223]=>
  float(0.1967379)
  [224]=>
  float(0.2491932)
  [225]=>
  float(0.1737893)
  [226]=>
  float(0.165557)
  [227]=>
  float(0.1221828)
  [228]=>
  float(0.2518461)
  [229]=>
  float(0.3618972)
  [230]=>
  float(0.3908922)
  [231]=>
  float(0.4852975)
  [232]=>
  float(0.6208026)
  [233]=>
  float(0.6159543)
  [234]=>
  float(0.5937786)
  [235]=>
  float(0.557039)
  [236]=>
  float(0.5459667)
  [237]=>
  float(0.4694459)
  [238]=>
  float(0.3953324)
  [239]=>
  float(0.4381391)
  [240]=>
  float(0.4560233)
  [241]=>
  float(0.4566418)
  [242]=>
  float(0.4430804)
  [243]=>
  float(0.4385852)
  [244]=>
  float(0.4391766)
  [245]=>
  float(0.4223501)
  [246]=>
  float(0.2269652)
  [247]=>
  float(0.1436066)
  [248]=>
  float(0.1291567)
  [249]=>
  float(0.1294449)
  [250]=>
  float(0.3519471)
  [251]=>
  float(0.0731918)
}--TEST--
trader_macd() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

$fast_period = 14;

var_dump(trader_aroon(get_data("high", $data0), get_data("low", $data0), $fast_period));

--EXPECT--
array(2) {
  [0]=>
  array(238) {
    [14]=>
    float(100)
    [15]=>
    float(92.857)
    [16]=>
    float(85.714)
    [17]=>
    float(78.571)
    [18]=>
    float(71.429)
    [19]=>
    float(64.286)
    [20]=>
    float(57.143)
    [21]=>
    float(100)
    [22]=>
    float(100)
    [23]=>
    float(100)
    [24]=>
    float(100)
    [25]=>
    float(100)
    [26]=>
    float(92.857)
    [27]=>
    float(85.714)
    [28]=>
    float(78.571)
    [29]=>
    float(71.429)
    [30]=>
    float(64.286)
    [31]=>
    float(57.143)
    [32]=>
    float(50)
    [33]=>
    float(42.857)
    [34]=>
    float(35.714)
    [35]=>
    float(28.571)
    [36]=>
    float(21.429)
    [37]=>
    float(14.286)
    [38]=>
    float(7.143)
    [39]=>
    float(0)
    [40]=>
    float(0)
    [41]=>
    float(92.857)
    [42]=>
    float(85.714)
    [43]=>
    float(78.571)
    [44]=>
    float(71.429)
    [45]=>
    float(64.286)
    [46]=>
    float(57.143)
    [47]=>
    float(50)
    [48]=>
    float(42.857)
    [49]=>
    float(35.714)
    [50]=>
    float(28.571)
    [51]=>
    float(21.429)
    [52]=>
    float(14.286)
    [53]=>
    float(7.143)
    [54]=>
    float(100)
    [55]=>
    float(92.857)
    [56]=>
    float(85.714)
    [57]=>
    float(78.571)
    [58]=>
    float(71.429)
    [59]=>
    float(64.286)
    [60]=>
    float(57.143)
    [61]=>
    float(50)
    [62]=>
    float(42.857)
    [63]=>
    float(35.714)
    [64]=>
    float(28.571)
    [65]=>
    float(21.429)
    [66]=>
    float(14.286)
    [67]=>
    float(7.143)
    [68]=>
    float(0)
    [69]=>
    float(0)
    [70]=>
    float(0)
    [71]=>
    float(100)
    [72]=>
    float(100)
    [73]=>
    float(100)
    [74]=>
    float(92.857)
    [75]=>
    float(85.714)
    [76]=>
    float(78.571)
    [77]=>
    float(71.429)
    [78]=>
    float(64.286)
    [79]=>
    float(57.143)
    [80]=>
    float(50)
    [81]=>
    float(42.857)
    [82]=>
    float(35.714)
    [83]=>
    float(28.571)
    [84]=>
    float(21.429)
    [85]=>
    float(14.286)
    [86]=>
    float(7.143)
    [87]=>
    float(0)
    [88]=>
    float(0)
    [89]=>
    float(0)
    [90]=>
    float(0)
    [91]=>
    float(0)
    [92]=>
    float(21.429)
    [93]=>
    float(14.286)
    [94]=>
    float(7.143)
    [95]=>
    float(0)
    [96]=>
    float(0)
    [97]=>
    float(7.143)
    [98]=>
    float(0)
    [99]=>
    float(0)
    [100]=>
    float(0)
    [101]=>
    float(14.286)
    [102]=>
    float(7.143)
    [103]=>
    float(0)
    [104]=>
    float(92.857)
    [105]=>
    float(85.714)
    [106]=>
    float(78.571)
    [107]=>
    float(71.429)
    [108]=>
    float(64.286)
    [109]=>
    float(57.143)
    [110]=>
    float(50)
    [111]=>
    float(42.857)
    [112]=>
    float(35.714)
    [113]=>
    float(28.571)
    [114]=>
    float(21.429)
    [115]=>
    float(14.286)
    [116]=>
    float(7.143)
    [117]=>
    float(0)
    [118]=>
    float(0)
    [119]=>
    float(0)
    [120]=>
    float(28.571)
    [121]=>
    float(21.429)
    [122]=>
    float(14.286)
    [123]=>
    float(7.143)
    [124]=>
    float(0)
    [125]=>
    float(0)
    [126]=>
    float(0)
    [127]=>
    float(0)
    [128]=>
    float(0)
    [129]=>
    float(0)
    [130]=>
    float(21.429)
    [131]=>
    float(14.286)
    [132]=>
    float(7.143)
    [133]=>
    float(0)
    [134]=>
    float(7.143)
    [135]=>
    float(0)
    [136]=>
    float(0)
    [137]=>
    float(0)
    [138]=>
    float(100)
    [139]=>
    float(100)
    [140]=>
    float(92.857)
    [141]=>
    float(85.714)
    [142]=>
    float(78.571)
    [143]=>
    float(71.429)
    [144]=>
    float(64.286)
    [145]=>
    float(100)
    [146]=>
    float(100)
    [147]=>
    float(100)
    [148]=>
    float(100)
    [149]=>
    float(92.857)
    [150]=>
    float(85.714)
    [151]=>
    float(78.571)
    [152]=>
    float(71.429)
    [153]=>
    float(64.286)
    [154]=>
    float(57.143)
    [155]=>
    float(50)
    [156]=>
    float(42.857)
    [157]=>
    float(35.714)
    [158]=>
    float(28.571)
    [159]=>
    float(21.429)
    [160]=>
    float(14.286)
    [161]=>
    float(7.143)
    [162]=>
    float(0)
    [163]=>
    float(14.286)
    [164]=>
    float(7.143)
    [165]=>
    float(0)
    [166]=>
    float(0)
    [167]=>
    float(64.286)
    [168]=>
    float(57.143)
    [169]=>
    float(50)
    [170]=>
    float(42.857)
    [171]=>
    float(35.714)
    [172]=>
    float(28.571)
    [173]=>
    float(21.429)
    [174]=>
    float(14.286)
    [175]=>
    float(7.143)
    [176]=>
    float(0)
    [177]=>
    float(0)
    [178]=>
    float(7.143)
    [179]=>
    float(0)
    [180]=>
    float(0)
    [181]=>
    float(78.571)
    [182]=>
    float(100)
    [183]=>
    float(100)
    [184]=>
    float(92.857)
    [185]=>
    float(85.714)
    [186]=>
    float(100)
    [187]=>
    float(100)
    [188]=>
    float(100)
    [189]=>
    float(92.857)
    [190]=>
    float(85.714)
    [191]=>
    float(78.571)
    [192]=>
    float(100)
    [193]=>
    float(100)
    [194]=>
    float(92.857)
    [195]=>
    float(100)
    [196]=>
    float(100)
    [197]=>
    float(100)
    [198]=>
    float(100)
    [199]=>
    float(92.857)
    [200]=>
    float(85.714)
    [201]=>
    float(78.571)
    [202]=>
    float(100)
    [203]=>
    float(92.857)
    [204]=>
    float(85.714)
    [205]=>
    float(78.571)
    [206]=>
    float(71.429)
    [207]=>
    float(64.286)
    [208]=>
    float(57.143)
    [209]=>
    float(50)
    [210]=>
    float(42.857)
    [211]=>
    float(35.714)
    [212]=>
    float(28.571)
    [213]=>
    float(21.429)
    [214]=>
    float(14.286)
    [215]=>
    float(7.143)
    [216]=>
    float(0)
    [217]=>
    float(64.286)
    [218]=>
    float(57.143)
    [219]=>
    float(50)
    [220]=>
    float(42.857)
    [221]=>
    float(35.714)
    [222]=>
    float(28.571)
    [223]=>
    float(21.429)
    [224]=>
    float(14.286)
    [225]=>
    float(7.143)
    [226]=>
    float(0)
    [227]=>
    float(0)
    [228]=>
    float(0)
    [229]=>
    float(0)
    [230]=>
    float(35.714)
    [231]=>
    float(28.571)
    [232]=>
    float(21.429)
    [233]=>
    float(14.286)
    [234]=>
    float(7.143)
    [235]=>
    float(0)
    [236]=>
    float(0)
    [237]=>
    float(0)
    [238]=>
    float(14.286)
    [239]=>
    float(7.143)
    [240]=>
    float(0)
    [241]=>
    float(14.286)
    [242]=>
    float(7.143)
    [243]=>
    float(0)
    [244]=>
    float(0)
    [245]=>
    float(0)
    [246]=>
    float(57.143)
    [247]=>
    float(50)
    [248]=>
    float(42.857)
    [249]=>
    float(35.714)
    [250]=>
    float(28.571)
    [251]=>
    float(21.429)
  }
  [1]=>
  array(238) {
    [14]=>
    float(78.571)
    [15]=>
    float(71.429)
    [16]=>
    float(64.286)
    [17]=>
    float(57.143)
    [18]=>
    float(50)
    [19]=>
    float(42.857)
    [20]=>
    float(35.714)
    [21]=>
    float(28.571)
    [22]=>
    float(21.429)
    [23]=>
    float(14.286)
    [24]=>
    float(7.143)
    [25]=>
    float(0)
    [26]=>
    float(0)
    [27]=>
    float(21.429)
    [28]=>
    float(14.286)
    [29]=>
    float(7.143)
    [30]=>
    float(0)
    [31]=>
    float(14.286)
    [32]=>
    float(7.143)
    [33]=>
    float(0)
    [34]=>
    float(0)
    [35]=>
    float(92.857)
    [36]=>
    float(85.714)
    [37]=>
    float(78.571)
    [38]=>
    float(71.429)
    [39]=>
    float(64.286)
    [40]=>
    float(57.143)
    [41]=>
    float(50)
    [42]=>
    float(42.857)
    [43]=>
    float(100)
    [44]=>
    float(100)
    [45]=>
    float(92.857)
    [46]=>
    float(100)
    [47]=>
    float(92.857)
    [48]=>
    float(85.714)
    [49]=>
    float(78.571)
    [50]=>
    float(71.429)
    [51]=>
    float(64.286)
    [52]=>
    float(57.143)
    [53]=>
    float(50)
    [54]=>
    float(42.857)
    [55]=>
    float(35.714)
    [56]=>
    float(28.571)
    [57]=>
    float(21.429)
    [58]=>
    float(14.286)
    [59]=>
    float(7.143)
    [60]=>
    float(0)
    [61]=>
    float(14.286)
    [62]=>
    float(100)
    [63]=>
    float(100)
    [64]=>
    float(100)
    [65]=>
    float(100)
    [66]=>
    float(100)
    [67]=>
    float(92.857)
    [68]=>
    float(85.714)
    [69]=>
    float(78.571)
    [70]=>
    float(71.429)
    [71]=>
    float(64.286)
    [72]=>
    float(57.143)
    [73]=>
    float(50)
    [74]=>
    float(42.857)
    [75]=>
    float(100)
    [76]=>
    float(100)
    [77]=>
    float(100)
    [78]=>
    float(100)
    [79]=>
    float(92.857)
    [80]=>
    float(85.714)
    [81]=>
    float(78.571)
    [82]=>
    float(71.429)
    [83]=>
    float(100)
    [84]=>
    float(92.857)
    [85]=>
    float(85.714)
    [86]=>
    float(100)
    [87]=>
    float(100)
    [88]=>
    float(100)
    [89]=>
    float(100)
    [90]=>
    float(100)
    [91]=>
    float(92.857)
    [92]=>
    float(85.714)
    [93]=>
    float(78.571)
    [94]=>
    float(71.429)
    [95]=>
    float(64.286)
    [96]=>
    float(57.143)
    [97]=>
    float(50)
    [98]=>
    float(42.857)
    [99]=>
    float(35.714)
    [100]=>
    float(28.571)
    [101]=>
    float(21.429)
    [102]=>
    float(14.286)
    [103]=>
    float(7.143)
    [104]=>
    float(0)
    [105]=>
    float(0)
    [106]=>
    float(100)
    [107]=>
    float(92.857)
    [108]=>
    float(85.714)
    [109]=>
    float(78.571)
    [110]=>
    float(71.429)
    [111]=>
    float(64.286)
    [112]=>
    float(57.143)
    [113]=>
    float(50)
    [114]=>
    float(100)
    [115]=>
    float(92.857)
    [116]=>
    float(100)
    [117]=>
    float(100)
    [118]=>
    float(92.857)
    [119]=>
    float(85.714)
    [120]=>
    float(78.571)
    [121]=>
    float(71.429)
    [122]=>
    float(64.286)
    [123]=>
    float(100)
    [124]=>
    float(92.857)
    [125]=>
    float(100)
    [126]=>
    float(100)
    [127]=>
    float(92.857)
    [128]=>
    float(100)
    [129]=>
    float(100)
    [130]=>
    float(100)
    [131]=>
    float(100)
    [132]=>
    float(92.857)
    [133]=>
    float(85.714)
    [134]=>
    float(78.571)
    [135]=>
    float(71.429)
    [136]=>
    float(64.286)
    [137]=>
    float(57.143)
    [138]=>
    float(50)
    [139]=>
    float(42.857)
    [140]=>
    float(35.714)
    [141]=>
    float(28.571)
    [142]=>
    float(21.429)
    [143]=>
    float(14.286)
    [144]=>
    float(7.143)
    [145]=>
    float(0)
    [146]=>
    float(21.429)
    [147]=>
    float(14.286)
    [148]=>
    float(7.143)
    [149]=>
    float(0)
    [150]=>
    float(0)
    [151]=>
    float(0)
    [152]=>
    float(28.571)
    [153]=>
    float(21.429)
    [154]=>
    float(14.286)
    [155]=>
    float(7.143)
    [156]=>
    float(0)
    [157]=>
    float(100)
    [158]=>
    float(92.857)
    [159]=>
    float(85.714)
    [160]=>
    float(78.571)
    [161]=>
    float(71.429)
    [162]=>
    float(64.286)
    [163]=>
    float(57.143)
    [164]=>
    float(50)
    [165]=>
    float(42.857)
    [166]=>
    float(35.714)
    [167]=>
    float(28.571)
    [168]=>
    float(21.429)
    [169]=>
    float(100)
    [170]=>
    float(100)
    [171]=>
    float(100)
    [172]=>
    float(100)
    [173]=>
    float(100)
    [174]=>
    float(92.857)
    [175]=>
    float(85.714)
    [176]=>
    float(78.571)
    [177]=>
    float(71.429)
    [178]=>
    float(64.286)
    [179]=>
    float(57.143)
    [180]=>
    float(50)
    [181]=>
    float(42.857)
    [182]=>
    float(35.714)
    [183]=>
    float(28.571)
    [184]=>
    float(21.429)
    [185]=>
    float(14.286)
    [186]=>
    float(7.143)
    [187]=>
    float(0)
    [188]=>
    float(0)
    [189]=>
    float(7.143)
    [190]=>
    float(0)
    [191]=>
    float(0)
    [192]=>
    float(0)
    [193]=>
    float(0)
    [194]=>
    float(0)
    [195]=>
    float(7.143)
    [196]=>
    float(0)
    [197]=>
    float(7.143)
    [198]=>
    float(0)
    [199]=>
    float(0)
    [200]=>
    float(28.571)
    [201]=>
    float(21.429)
    [202]=>
    float(14.286)
    [203]=>
    float(7.143)
    [204]=>
    float(0)
    [205]=>
    float(0)
    [206]=>
    float(0)
    [207]=>
    float(7.143)
    [208]=>
    float(0)
    [209]=>
    float(0)
    [210]=>
    float(35.714)
    [211]=>
    float(28.571)
    [212]=>
    float(21.429)
    [213]=>
    float(14.286)
    [214]=>
    float(7.143)
    [215]=>
    float(0)
    [216]=>
    float(42.857)
    [217]=>
    float(35.714)
    [218]=>
    float(28.571)
    [219]=>
    float(21.429)
    [220]=>
    float(14.286)
    [221]=>
    float(7.143)
    [222]=>
    float(0)
    [223]=>
    float(100)
    [224]=>
    float(100)
    [225]=>
    float(100)
    [226]=>
    float(92.857)
    [227]=>
    float(85.714)
    [228]=>
    float(78.571)
    [229]=>
    float(71.429)
    [230]=>
    float(64.286)
    [231]=>
    float(57.143)
    [232]=>
    float(100)
    [233]=>
    float(100)
    [234]=>
    float(100)
    [235]=>
    float(100)
    [236]=>
    float(100)
    [237]=>
    float(92.857)
    [238]=>
    float(85.714)
    [239]=>
    float(78.571)
    [240]=>
    float(71.429)
    [241]=>
    float(64.286)
    [242]=>
    float(57.143)
    [243]=>
    float(50)
    [244]=>
    float(42.857)
    [245]=>
    float(35.714)
    [246]=>
    float(28.571)
    [247]=>
    float(21.429)
    [248]=>
    float(14.286)
    [249]=>
    float(7.143)
    [250]=>
    float(0)
    [251]=>
    float(7.143)
  }
}--TEST--
trader_ht_phasor() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--INI--
trader.real_precision=3
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

/* Lookback is 32. */
var_dump(trader_ht_phasor(
	array_slice(get_data("close", $data0), 0, 35)
));
?>
--EXPECT--
array(2) {
  [0]=>
  array(3) {
    [32]=>
    float(2.805)
    [33]=>
    float(3.219)
    [34]=>
    float(1.613)
  }
  [1]=>
  array(3) {
    [32]=>
    float(4.668)
    [33]=>
    float(-0.935)
    [34]=>
    float(-3.103)
  }
}
--TEST--
trader_avgprice() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--INI--
trader.real_precision=5
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

var_dump(trader_avgprice(
	get_data("open", $data0),
	get_data("high", $data0),
	get_data("low", $data0),
	get_data("close", $data0)
));


--EXPECT--
array(252) {
  [0]=>
  float(92)
  [1]=>
  float(93.165)
  [2]=>
  float(95.03875)
  [3]=>
  float(94.68875)
  [4]=>
  float(94.52375)
  [5]=>
  float(94.33625)
  [6]=>
  float(93.6325)
  [7]=>
  float(91.93)
  [8]=>
  float(91.01)
  [9]=>
  float(91.7425)
  [10]=>
  float(94.75)
  [11]=>
  float(97.6725)
  [12]=>
  float(98.1175)
  [13]=>
  float(90.86)
  [14]=>
  float(90.0475)
  [15]=>
  float(92.22)
  [16]=>
  float(91.2175)
  [17]=>
  float(89.6325)
  [18]=>
  float(90.5475)
  [19]=>
  float(91.03125)
  [20]=>
  float(89)
  [21]=>
  float(87.64875)
  [22]=>
  float(86.3125)
  [23]=>
  float(84)
  [24]=>
  float(83.25125)
  [25]=>
  float(82.625)
  [26]=>
  float(82.845)
  [27]=>
  float(86.96125)
  [28]=>
  float(87.055)
  [29]=>
  float(87.21125)
  [30]=>
  float(85.515)
  [31]=>
  float(86.3675)
  [32]=>
  float(86.47)
  [33]=>
  float(87.39875)
  [34]=>
  float(88.83625)
  [35]=>
  float(87.9775)
  [36]=>
  float(86.11)
  [37]=>
  float(84.89125)
  [38]=>
  float(84.06375)
  [39]=>
  float(84.50875)
  [40]=>
  float(83.65625)
  [41]=>
  float(86.45375)
  [42]=>
  float(88.11875)
  [43]=>
  float(89.32125)
  [44]=>
  float(90.68875)
  [45]=>
  float(90.7825)
  [46]=>
  float(91.5875)
  [47]=>
  float(90.26625)
  [48]=>
  float(90.07875)
  [49]=>
  float(90.83625)
  [50]=>
  float(89.445)
  [51]=>
  float(88.2275)
  [52]=>
  float(86.39875)
  [53]=>
  float(84.1025)
  [54]=>
  float(83.00125)
  [55]=>
  float(84.3125)
  [56]=>
  float(85.7575)
  [57]=>
  float(86.235)
  [58]=>
  float(88.25125)
  [59]=>
  float(89.21125)
  [60]=>
  float(89.40625)
  [61]=>
  float(88.33625)
  [62]=>
  float(90.68)
  [63]=>
  float(91.88375)
  [64]=>
  float(92.14875)
  [65]=>
  float(92.92125)
  [66]=>
  float(93)
  [67]=>
  float(91.45375)
  [68]=>
  float(90.9925)
  [69]=>
  float(90.455)
  [70]=>
  float(88.78125)
  [71]=>
  float(86.93875)
  [72]=>
  float(84.25)
  [73]=>
  float(83.6875)
  [74]=>
  float(84.83)
  [75]=>
  float(97.89875)
  [76]=>
  float(99.07875)
  [77]=>
  float(103.46125)
  [78]=>
  float(105.96875)
  [79]=>
  float(103.53125)
  [80]=>
  float(102.78125)
  [81]=>
  float(104.01625)
  [82]=>
  float(104.85125)
  [83]=>
  float(106.43875)
  [84]=>
  float(105.50875)
  [85]=>
  float(105.39125)
  [86]=>
  float(107.1325)
  [87]=>
  float(109.3525)
  [88]=>
  float(110.11)
  [89]=>
  float(111.32125)
  [90]=>
  float(120)
  [91]=>
  float(120.03125)
  [92]=>
  float(118.14125)
  [93]=>
  float(119.2975)
  [94]=>
  float(118.2425)
  [95]=>
  float(117.17375)
  [96]=>
  float(115.7125)
  [97]=>
  float(113.3125)
  [98]=>
  float(111.33625)
  [99]=>
  float(114.665)
  [100]=>
  float(115.545)
  [101]=>
  float(115.735)
  [102]=>
  float(112.67)
  [103]=>
  float(112.39)
  [104]=>
  float(113.5925)
  [105]=>
  float(114.515)
  [106]=>
  float(119.4525)
  [107]=>
  float(118.105)
  [108]=>
  float(117.7625)
  [109]=>
  float(115.295)
  [110]=>
  float(114.6075)
  [111]=>
  float(115.3425)
  [112]=>
  float(116.6075)
  [113]=>
  float(120.2325)
  [114]=>
  float(120.11)
  [115]=>
  float(120.5325)
  [116]=>
  float(123.9975)
  [117]=>
  float(124.4975)
  [118]=>
  float(122.7825)
  [119]=>
  float(122.92)
  [120]=>
  float(123.825)
  [121]=>
  float(123.36)
  [122]=>
  float(123.92)
  [123]=>
  float(127.6075)
  [124]=>
  float(130.0775)
  [125]=>
  float(131.22)
  [126]=>
  float(132.0475)
  [127]=>
  float(131.985)
  [128]=>
  float(133.5325)
  [129]=>
  float(135.675)
  [130]=>
  float(137.33)
  [131]=>
  float(137.1425)
  [132]=>
  float(137.5625)
  [133]=>
  float(136.735)
  [134]=>
  float(136.3775)
  [135]=>
  float(135.925)
  [136]=>
  float(129.61)
  [137]=>
  float(128.28)
  [138]=>
  float(125.8725)
  [139]=>
  float(124.2175)
  [140]=>
  float(123.6225)
  [141]=>
  float(125.3275)
  [142]=>
  float(127.3125)
  [143]=>
  float(125.715)
  [144]=>
  float(125.6725)
  [145]=>
  float(123.515)
  [146]=>
  float(120.8575)
  [147]=>
  float(119.6075)
  [148]=>
  float(121.1875)
  [149]=>
  float(123.375)
  [150]=>
  float(122.8425)
  [151]=>
  float(120.5625)
  [152]=>
  float(121.7475)
  [153]=>
  float(122.42)
  [154]=>
  float(123.155)
  [155]=>
  float(126.185)
  [156]=>
  float(128.03)
  [157]=>
  float(126.345)
  [158]=>
  float(123.2325)
  [159]=>
  float(122.8875)
  [160]=>
  float(123.5925)
  [161]=>
  float(122.4975)
  [162]=>
  float(122.325)
  [163]=>
  float(123.3725)
  [164]=>
  float(124.235)
  [165]=>
  float(123.9375)
  [166]=>
  float(124.45)
  [167]=>
  float(126.7175)
  [168]=>
  float(125.8425)
  [169]=>
  float(128.7475)
  [170]=>
  float(130.4875)
  [171]=>
  float(131.72)
  [172]=>
  float(133.845)
  [173]=>
  float(136.1425)
  [174]=>
  float(133.6425)
  [175]=>
  float(132.7025)
  [176]=>
  float(133.22)
  [177]=>
  float(130.985)
  [178]=>
  float(127.985)
  [179]=>
  float(128.3775)
  [180]=>
  float(127.9375)
  [181]=>
  float(126)
  [182]=>
  float(124.6875)
  [183]=>
  float(122.735)
  [184]=>
  float(124.45)
  [185]=>
  float(123.235)
  [186]=>
  float(121.2325)
  [187]=>
  float(120.9675)
  [188]=>
  float(118.8275)
  [189]=>
  float(118.655)
  [190]=>
  float(121.5775)
  [191]=>
  float(120.8125)
  [192]=>
  float(117.435)
  [193]=>
  float(113.655)
  [194]=>
  float(114.39)
  [195]=>
  float(112.2175)
  [196]=>
  float(107.935)
  [197]=>
  float(106.36)
  [198]=>
  float(106.7625)
  [199]=>
  float(107.1725)
  [200]=>
  float(107.015)
  [201]=>
  float(108.92)
  [202]=>
  float(91.5)
  [203]=>
  float(93.7025)
  [204]=>
  float(93.84)
  [205]=>
  float(95.2475)
  [206]=>
  float(94.2175)
  [207]=>
  float(94.75)
  [208]=>
  float(97.625)
  [209]=>
  float(97.6075)
  [210]=>
  float(95.515)
  [211]=>
  float(94.92)
  [212]=>
  float(92.61)
  [213]=>
  float(91.5325)
  [214]=>
  float(92.22)
  [215]=>
  float(94.075)
  [216]=>
  float(95.7)
  [217]=>
  float(96.2175)
  [218]=>
  float(95.28)
  [219]=>
  float(95.075)
  [220]=>
  float(94.31)
  [221]=>
  float(94.0275)
  [222]=>
  float(95.9525)
  [223]=>
  float(101.6075)
  [224]=>
  float(106.5625)
  [225]=>
  float(107.685)
  [226]=>
  float(104.0775)
  [227]=>
  float(105.265)
  [228]=>
  float(104.36)
  [229]=>
  float(103.3425)
  [230]=>
  float(103.1675)
  [231]=>
  float(104.5975)
  [232]=>
  float(110.6225)
  [233]=>
  float(114.5)
  [234]=>
  float(117.0625)
  [235]=>
  float(117.7575)
  [236]=>
  float(117.06)
  [237]=>
  float(110.03)
  [238]=>
  float(109.2825)
  [239]=>
  float(109.125)
  [240]=>
  float(106.7975)
  [241]=>
  float(108.1575)
  [242]=>
  float(110.0925)
  [243]=>
  float(109.1125)
  [244]=>
  float(109.2)
  [245]=>
  float(109.045)
  [246]=>
  float(109.0925)
  [247]=>
  float(109.39)
  [248]=>
  float(109.795)
  [249]=>
  float(109.6725)
  [250]=>
  float(109.375)
  [251]=>
  float(108.295)
}--TEST--
trader_aroon() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

$period = 14;

var_dump(trader_aroon(get_data("high", $data0), get_data("low", $data0), $period));

--EXPECT--
array(2) {
  [0]=>
  array(238) {
    [14]=>
    float(100)
    [15]=>
    float(92.857)
    [16]=>
    float(85.714)
    [17]=>
    float(78.571)
    [18]=>
    float(71.429)
    [19]=>
    float(64.286)
    [20]=>
    float(57.143)
    [21]=>
    float(100)
    [22]=>
    float(100)
    [23]=>
    float(100)
    [24]=>
    float(100)
    [25]=>
    float(100)
    [26]=>
    float(92.857)
    [27]=>
    float(85.714)
    [28]=>
    float(78.571)
    [29]=>
    float(71.429)
    [30]=>
    float(64.286)
    [31]=>
    float(57.143)
    [32]=>
    float(50)
    [33]=>
    float(42.857)
    [34]=>
    float(35.714)
    [35]=>
    float(28.571)
    [36]=>
    float(21.429)
    [37]=>
    float(14.286)
    [38]=>
    float(7.143)
    [39]=>
    float(0)
    [40]=>
    float(0)
    [41]=>
    float(92.857)
    [42]=>
    float(85.714)
    [43]=>
    float(78.571)
    [44]=>
    float(71.429)
    [45]=>
    float(64.286)
    [46]=>
    float(57.143)
    [47]=>
    float(50)
    [48]=>
    float(42.857)
    [49]=>
    float(35.714)
    [50]=>
    float(28.571)
    [51]=>
    float(21.429)
    [52]=>
    float(14.286)
    [53]=>
    float(7.143)
    [54]=>
    float(100)
    [55]=>
    float(92.857)
    [56]=>
    float(85.714)
    [57]=>
    float(78.571)
    [58]=>
    float(71.429)
    [59]=>
    float(64.286)
    [60]=>
    float(57.143)
    [61]=>
    float(50)
    [62]=>
    float(42.857)
    [63]=>
    float(35.714)
    [64]=>
    float(28.571)
    [65]=>
    float(21.429)
    [66]=>
    float(14.286)
    [67]=>
    float(7.143)
    [68]=>
    float(0)
    [69]=>
    float(0)
    [70]=>
    float(0)
    [71]=>
    float(100)
    [72]=>
    float(100)
    [73]=>
    float(100)
    [74]=>
    float(92.857)
    [75]=>
    float(85.714)
    [76]=>
    float(78.571)
    [77]=>
    float(71.429)
    [78]=>
    float(64.286)
    [79]=>
    float(57.143)
    [80]=>
    float(50)
    [81]=>
    float(42.857)
    [82]=>
    float(35.714)
    [83]=>
    float(28.571)
    [84]=>
    float(21.429)
    [85]=>
    float(14.286)
    [86]=>
    float(7.143)
    [87]=>
    float(0)
    [88]=>
    float(0)
    [89]=>
    float(0)
    [90]=>
    float(0)
    [91]=>
    float(0)
    [92]=>
    float(21.429)
    [93]=>
    float(14.286)
    [94]=>
    float(7.143)
    [95]=>
    float(0)
    [96]=>
    float(0)
    [97]=>
    float(7.143)
    [98]=>
    float(0)
    [99]=>
    float(0)
    [100]=>
    float(0)
    [101]=>
    float(14.286)
    [102]=>
    float(7.143)
    [103]=>
    float(0)
    [104]=>
    float(92.857)
    [105]=>
    float(85.714)
    [106]=>
    float(78.571)
    [107]=>
    float(71.429)
    [108]=>
    float(64.286)
    [109]=>
    float(57.143)
    [110]=>
    float(50)
    [111]=>
    float(42.857)
    [112]=>
    float(35.714)
    [113]=>
    float(28.571)
    [114]=>
    float(21.429)
    [115]=>
    float(14.286)
    [116]=>
    float(7.143)
    [117]=>
    float(0)
    [118]=>
    float(0)
    [119]=>
    float(0)
    [120]=>
    float(28.571)
    [121]=>
    float(21.429)
    [122]=>
    float(14.286)
    [123]=>
    float(7.143)
    [124]=>
    float(0)
    [125]=>
    float(0)
    [126]=>
    float(0)
    [127]=>
    float(0)
    [128]=>
    float(0)
    [129]=>
    float(0)
    [130]=>
    float(21.429)
    [131]=>
    float(14.286)
    [132]=>
    float(7.143)
    [133]=>
    float(0)
    [134]=>
    float(7.143)
    [135]=>
    float(0)
    [136]=>
    float(0)
    [137]=>
    float(0)
    [138]=>
    float(100)
    [139]=>
    float(100)
    [140]=>
    float(92.857)
    [141]=>
    float(85.714)
    [142]=>
    float(78.571)
    [143]=>
    float(71.429)
    [144]=>
    float(64.286)
    [145]=>
    float(100)
    [146]=>
    float(100)
    [147]=>
    float(100)
    [148]=>
    float(100)
    [149]=>
    float(92.857)
    [150]=>
    float(85.714)
    [151]=>
    float(78.571)
    [152]=>
    float(71.429)
    [153]=>
    float(64.286)
    [154]=>
    float(57.143)
    [155]=>
    float(50)
    [156]=>
    float(42.857)
    [157]=>
    float(35.714)
    [158]=>
    float(28.571)
    [159]=>
    float(21.429)
    [160]=>
    float(14.286)
    [161]=>
    float(7.143)
    [162]=>
    float(0)
    [163]=>
    float(14.286)
    [164]=>
    float(7.143)
    [165]=>
    float(0)
    [166]=>
    float(0)
    [167]=>
    float(64.286)
    [168]=>
    float(57.143)
    [169]=>
    float(50)
    [170]=>
    float(42.857)
    [171]=>
    float(35.714)
    [172]=>
    float(28.571)
    [173]=>
    float(21.429)
    [174]=>
    float(14.286)
    [175]=>
    float(7.143)
    [176]=>
    float(0)
    [177]=>
    float(0)
    [178]=>
    float(7.143)
    [179]=>
    float(0)
    [180]=>
    float(0)
    [181]=>
    float(78.571)
    [182]=>
    float(100)
    [183]=>
    float(100)
    [184]=>
    float(92.857)
    [185]=>
    float(85.714)
    [186]=>
    float(100)
    [187]=>
    float(100)
    [188]=>
    float(100)
    [189]=>
    float(92.857)
    [190]=>
    float(85.714)
    [191]=>
    float(78.571)
    [192]=>
    float(100)
    [193]=>
    float(100)
    [194]=>
    float(92.857)
    [195]=>
    float(100)
    [196]=>
    float(100)
    [197]=>
    float(100)
    [198]=>
    float(100)
    [199]=>
    float(92.857)
    [200]=>
    float(85.714)
    [201]=>
    float(78.571)
    [202]=>
    float(100)
    [203]=>
    float(92.857)
    [204]=>
    float(85.714)
    [205]=>
    float(78.571)
    [206]=>
    float(71.429)
    [207]=>
    float(64.286)
    [208]=>
    float(57.143)
    [209]=>
    float(50)
    [210]=>
    float(42.857)
    [211]=>
    float(35.714)
    [212]=>
    float(28.571)
    [213]=>
    float(21.429)
    [214]=>
    float(14.286)
    [215]=>
    float(7.143)
    [216]=>
    float(0)
    [217]=>
    float(64.286)
    [218]=>
    float(57.143)
    [219]=>
    float(50)
    [220]=>
    float(42.857)
    [221]=>
    float(35.714)
    [222]=>
    float(28.571)
    [223]=>
    float(21.429)
    [224]=>
    float(14.286)
    [225]=>
    float(7.143)
    [226]=>
    float(0)
    [227]=>
    float(0)
    [228]=>
    float(0)
    [229]=>
    float(0)
    [230]=>
    float(35.714)
    [231]=>
    float(28.571)
    [232]=>
    float(21.429)
    [233]=>
    float(14.286)
    [234]=>
    float(7.143)
    [235]=>
    float(0)
    [236]=>
    float(0)
    [237]=>
    float(0)
    [238]=>
    float(14.286)
    [239]=>
    float(7.143)
    [240]=>
    float(0)
    [241]=>
    float(14.286)
    [242]=>
    float(7.143)
    [243]=>
    float(0)
    [244]=>
    float(0)
    [245]=>
    float(0)
    [246]=>
    float(57.143)
    [247]=>
    float(50)
    [248]=>
    float(42.857)
    [249]=>
    float(35.714)
    [250]=>
    float(28.571)
    [251]=>
    float(21.429)
  }
  [1]=>
  array(238) {
    [14]=>
    float(78.571)
    [15]=>
    float(71.429)
    [16]=>
    float(64.286)
    [17]=>
    float(57.143)
    [18]=>
    float(50)
    [19]=>
    float(42.857)
    [20]=>
    float(35.714)
    [21]=>
    float(28.571)
    [22]=>
    float(21.429)
    [23]=>
    float(14.286)
    [24]=>
    float(7.143)
    [25]=>
    float(0)
    [26]=>
    float(0)
    [27]=>
    float(21.429)
    [28]=>
    float(14.286)
    [29]=>
    float(7.143)
    [30]=>
    float(0)
    [31]=>
    float(14.286)
    [32]=>
    float(7.143)
    [33]=>
    float(0)
    [34]=>
    float(0)
    [35]=>
    float(92.857)
    [36]=>
    float(85.714)
    [37]=>
    float(78.571)
    [38]=>
    float(71.429)
    [39]=>
    float(64.286)
    [40]=>
    float(57.143)
    [41]=>
    float(50)
    [42]=>
    float(42.857)
    [43]=>
    float(100)
    [44]=>
    float(100)
    [45]=>
    float(92.857)
    [46]=>
    float(100)
    [47]=>
    float(92.857)
    [48]=>
    float(85.714)
    [49]=>
    float(78.571)
    [50]=>
    float(71.429)
    [51]=>
    float(64.286)
    [52]=>
    float(57.143)
    [53]=>
    float(50)
    [54]=>
    float(42.857)
    [55]=>
    float(35.714)
    [56]=>
    float(28.571)
    [57]=>
    float(21.429)
    [58]=>
    float(14.286)
    [59]=>
    float(7.143)
    [60]=>
    float(0)
    [61]=>
    float(14.286)
    [62]=>
    float(100)
    [63]=>
    float(100)
    [64]=>
    float(100)
    [65]=>
    float(100)
    [66]=>
    float(100)
    [67]=>
    float(92.857)
    [68]=>
    float(85.714)
    [69]=>
    float(78.571)
    [70]=>
    float(71.429)
    [71]=>
    float(64.286)
    [72]=>
    float(57.143)
    [73]=>
    float(50)
    [74]=>
    float(42.857)
    [75]=>
    float(100)
    [76]=>
    float(100)
    [77]=>
    float(100)
    [78]=>
    float(100)
    [79]=>
    float(92.857)
    [80]=>
    float(85.714)
    [81]=>
    float(78.571)
    [82]=>
    float(71.429)
    [83]=>
    float(100)
    [84]=>
    float(92.857)
    [85]=>
    float(85.714)
    [86]=>
    float(100)
    [87]=>
    float(100)
    [88]=>
    float(100)
    [89]=>
    float(100)
    [90]=>
    float(100)
    [91]=>
    float(92.857)
    [92]=>
    float(85.714)
    [93]=>
    float(78.571)
    [94]=>
    float(71.429)
    [95]=>
    float(64.286)
    [96]=>
    float(57.143)
    [97]=>
    float(50)
    [98]=>
    float(42.857)
    [99]=>
    float(35.714)
    [100]=>
    float(28.571)
    [101]=>
    float(21.429)
    [102]=>
    float(14.286)
    [103]=>
    float(7.143)
    [104]=>
    float(0)
    [105]=>
    float(0)
    [106]=>
    float(100)
    [107]=>
    float(92.857)
    [108]=>
    float(85.714)
    [109]=>
    float(78.571)
    [110]=>
    float(71.429)
    [111]=>
    float(64.286)
    [112]=>
    float(57.143)
    [113]=>
    float(50)
    [114]=>
    float(100)
    [115]=>
    float(92.857)
    [116]=>
    float(100)
    [117]=>
    float(100)
    [118]=>
    float(92.857)
    [119]=>
    float(85.714)
    [120]=>
    float(78.571)
    [121]=>
    float(71.429)
    [122]=>
    float(64.286)
    [123]=>
    float(100)
    [124]=>
    float(92.857)
    [125]=>
    float(100)
    [126]=>
    float(100)
    [127]=>
    float(92.857)
    [128]=>
    float(100)
    [129]=>
    float(100)
    [130]=>
    float(100)
    [131]=>
    float(100)
    [132]=>
    float(92.857)
    [133]=>
    float(85.714)
    [134]=>
    float(78.571)
    [135]=>
    float(71.429)
    [136]=>
    float(64.286)
    [137]=>
    float(57.143)
    [138]=>
    float(50)
    [139]=>
    float(42.857)
    [140]=>
    float(35.714)
    [141]=>
    float(28.571)
    [142]=>
    float(21.429)
    [143]=>
    float(14.286)
    [144]=>
    float(7.143)
    [145]=>
    float(0)
    [146]=>
    float(21.429)
    [147]=>
    float(14.286)
    [148]=>
    float(7.143)
    [149]=>
    float(0)
    [150]=>
    float(0)
    [151]=>
    float(0)
    [152]=>
    float(28.571)
    [153]=>
    float(21.429)
    [154]=>
    float(14.286)
    [155]=>
    float(7.143)
    [156]=>
    float(0)
    [157]=>
    float(100)
    [158]=>
    float(92.857)
    [159]=>
    float(85.714)
    [160]=>
    float(78.571)
    [161]=>
    float(71.429)
    [162]=>
    float(64.286)
    [163]=>
    float(57.143)
    [164]=>
    float(50)
    [165]=>
    float(42.857)
    [166]=>
    float(35.714)
    [167]=>
    float(28.571)
    [168]=>
    float(21.429)
    [169]=>
    float(100)
    [170]=>
    float(100)
    [171]=>
    float(100)
    [172]=>
    float(100)
    [173]=>
    float(100)
    [174]=>
    float(92.857)
    [175]=>
    float(85.714)
    [176]=>
    float(78.571)
    [177]=>
    float(71.429)
    [178]=>
    float(64.286)
    [179]=>
    float(57.143)
    [180]=>
    float(50)
    [181]=>
    float(42.857)
    [182]=>
    float(35.714)
    [183]=>
    float(28.571)
    [184]=>
    float(21.429)
    [185]=>
    float(14.286)
    [186]=>
    float(7.143)
    [187]=>
    float(0)
    [188]=>
    float(0)
    [189]=>
    float(7.143)
    [190]=>
    float(0)
    [191]=>
    float(0)
    [192]=>
    float(0)
    [193]=>
    float(0)
    [194]=>
    float(0)
    [195]=>
    float(7.143)
    [196]=>
    float(0)
    [197]=>
    float(7.143)
    [198]=>
    float(0)
    [199]=>
    float(0)
    [200]=>
    float(28.571)
    [201]=>
    float(21.429)
    [202]=>
    float(14.286)
    [203]=>
    float(7.143)
    [204]=>
    float(0)
    [205]=>
    float(0)
    [206]=>
    float(0)
    [207]=>
    float(7.143)
    [208]=>
    float(0)
    [209]=>
    float(0)
    [210]=>
    float(35.714)
    [211]=>
    float(28.571)
    [212]=>
    float(21.429)
    [213]=>
    float(14.286)
    [214]=>
    float(7.143)
    [215]=>
    float(0)
    [216]=>
    float(42.857)
    [217]=>
    float(35.714)
    [218]=>
    float(28.571)
    [219]=>
    float(21.429)
    [220]=>
    float(14.286)
    [221]=>
    float(7.143)
    [222]=>
    float(0)
    [223]=>
    float(100)
    [224]=>
    float(100)
    [225]=>
    float(100)
    [226]=>
    float(92.857)
    [227]=>
    float(85.714)
    [228]=>
    float(78.571)
    [229]=>
    float(71.429)
    [230]=>
    float(64.286)
    [231]=>
    float(57.143)
    [232]=>
    float(100)
    [233]=>
    float(100)
    [234]=>
    float(100)
    [235]=>
    float(100)
    [236]=>
    float(100)
    [237]=>
    float(92.857)
    [238]=>
    float(85.714)
    [239]=>
    float(78.571)
    [240]=>
    float(71.429)
    [241]=>
    float(64.286)
    [242]=>
    float(57.143)
    [243]=>
    float(50)
    [244]=>
    float(42.857)
    [245]=>
    float(35.714)
    [246]=>
    float(28.571)
    [247]=>
    float(21.429)
    [248]=>
    float(14.286)
    [249]=>
    float(7.143)
    [250]=>
    float(0)
    [251]=>
    float(7.143)
  }
}--TEST--
trader_atan() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

var_dump(trader_atan($trig_cos));

--EXPECT--
array(199) {
  [0]=>
  float(0)
  [1]=>
  float(0.1)
  [2]=>
  float(0.197)
  [3]=>
  float(0.291)
  [4]=>
  float(0.381)
  [5]=>
  float(0.464)
  [6]=>
  float(0.54)
  [7]=>
  float(0.611)
  [8]=>
  float(0.675)
  [9]=>
  float(0.733)
  [10]=>
  float(0.1)
  [11]=>
  float(0.11)
  [12]=>
  float(0.119)
  [13]=>
  float(0.129)
  [14]=>
  float(0.139)
  [15]=>
  float(0.149)
  [16]=>
  float(0.159)
  [17]=>
  float(0.168)
  [18]=>
  float(0.178)
  [19]=>
  float(0.188)
  [20]=>
  float(0.197)
  [21]=>
  float(0.207)
  [22]=>
  float(0.217)
  [23]=>
  float(0.226)
  [24]=>
  float(0.236)
  [25]=>
  float(0.245)
  [26]=>
  float(0.254)
  [27]=>
  float(0.264)
  [28]=>
  float(0.273)
  [29]=>
  float(0.282)
  [30]=>
  float(0.291)
  [31]=>
  float(0.301)
  [32]=>
  float(0.31)
  [33]=>
  float(0.319)
  [34]=>
  float(0.328)
  [35]=>
  float(0.337)
  [36]=>
  float(0.346)
  [37]=>
  float(0.354)
  [38]=>
  float(0.363)
  [39]=>
  float(0.372)
  [40]=>
  float(0.381)
  [41]=>
  float(0.389)
  [42]=>
  float(0.398)
  [43]=>
  float(0.406)
  [44]=>
  float(0.415)
  [45]=>
  float(0.423)
  [46]=>
  float(0.431)
  [47]=>
  float(0.439)
  [48]=>
  float(0.448)
  [49]=>
  float(0.456)
  [50]=>
  float(0.464)
  [51]=>
  float(0.472)
  [52]=>
  float(0.48)
  [53]=>
  float(0.487)
  [54]=>
  float(0.495)
  [55]=>
  float(0.503)
  [56]=>
  float(0.51)
  [57]=>
  float(0.518)
  [58]=>
  float(0.526)
  [59]=>
  float(0.533)
  [60]=>
  float(0.54)
  [61]=>
  float(0.548)
  [62]=>
  float(0.555)
  [63]=>
  float(0.562)
  [64]=>
  float(0.569)
  [65]=>
  float(0.576)
  [66]=>
  float(0.583)
  [67]=>
  float(0.59)
  [68]=>
  float(0.597)
  [69]=>
  float(0.604)
  [70]=>
  float(0.611)
  [71]=>
  float(0.617)
  [72]=>
  float(0.624)
  [73]=>
  float(0.631)
  [74]=>
  float(0.637)
  [75]=>
  float(0.644)
  [76]=>
  float(0.65)
  [77]=>
  float(0.656)
  [78]=>
  float(0.662)
  [79]=>
  float(0.669)
  [80]=>
  float(0.675)
  [81]=>
  float(0.681)
  [82]=>
  float(0.687)
  [83]=>
  float(0.693)
  [84]=>
  float(0.699)
  [85]=>
  float(0.704)
  [86]=>
  float(0.71)
  [87]=>
  float(0.716)
  [88]=>
  float(0.722)
  [89]=>
  float(0.727)
  [90]=>
  float(0.733)
  [91]=>
  float(0.738)
  [92]=>
  float(0.744)
  [93]=>
  float(0.749)
  [94]=>
  float(0.754)
  [95]=>
  float(0.76)
  [96]=>
  float(0.765)
  [97]=>
  float(0.77)
  [98]=>
  float(0.775)
  [99]=>
  float(0.78)
  [100]=>
  float(-0.1)
  [101]=>
  float(-0.197)
  [102]=>
  float(-0.291)
  [103]=>
  float(-0.381)
  [104]=>
  float(-0.464)
  [105]=>
  float(-0.54)
  [106]=>
  float(-0.611)
  [107]=>
  float(-0.675)
  [108]=>
  float(-0.733)
  [109]=>
  float(-0.1)
  [110]=>
  float(-0.11)
  [111]=>
  float(-0.119)
  [112]=>
  float(-0.129)
  [113]=>
  float(-0.139)
  [114]=>
  float(-0.149)
  [115]=>
  float(-0.159)
  [116]=>
  float(-0.168)
  [117]=>
  float(-0.178)
  [118]=>
  float(-0.188)
  [119]=>
  float(-0.197)
  [120]=>
  float(-0.207)
  [121]=>
  float(-0.217)
  [122]=>
  float(-0.226)
  [123]=>
  float(-0.236)
  [124]=>
  float(-0.245)
  [125]=>
  float(-0.254)
  [126]=>
  float(-0.264)
  [127]=>
  float(-0.273)
  [128]=>
  float(-0.282)
  [129]=>
  float(-0.291)
  [130]=>
  float(-0.301)
  [131]=>
  float(-0.31)
  [132]=>
  float(-0.319)
  [133]=>
  float(-0.328)
  [134]=>
  float(-0.337)
  [135]=>
  float(-0.346)
  [136]=>
  float(-0.354)
  [137]=>
  float(-0.363)
  [138]=>
  float(-0.372)
  [139]=>
  float(-0.381)
  [140]=>
  float(-0.389)
  [141]=>
  float(-0.398)
  [142]=>
  float(-0.406)
  [143]=>
  float(-0.415)
  [144]=>
  float(-0.423)
  [145]=>
  float(-0.431)
  [146]=>
  float(-0.439)
  [147]=>
  float(-0.448)
  [148]=>
  float(-0.456)
  [149]=>
  float(-0.464)
  [150]=>
  float(-0.472)
  [151]=>
  float(-0.48)
  [152]=>
  float(-0.487)
  [153]=>
  float(-0.495)
  [154]=>
  float(-0.503)
  [155]=>
  float(-0.51)
  [156]=>
  float(-0.518)
  [157]=>
  float(-0.526)
  [158]=>
  float(-0.533)
  [159]=>
  float(-0.54)
  [160]=>
  float(-0.548)
  [161]=>
  float(-0.555)
  [162]=>
  float(-0.562)
  [163]=>
  float(-0.569)
  [164]=>
  float(-0.576)
  [165]=>
  float(-0.583)
  [166]=>
  float(-0.59)
  [167]=>
  float(-0.597)
  [168]=>
  float(-0.604)
  [169]=>
  float(-0.611)
  [170]=>
  float(-0.617)
  [171]=>
  float(-0.624)
  [172]=>
  float(-0.631)
  [173]=>
  float(-0.637)
  [174]=>
  float(-0.644)
  [175]=>
  float(-0.65)
  [176]=>
  float(-0.656)
  [177]=>
  float(-0.662)
  [178]=>
  float(-0.669)
  [179]=>
  float(-0.675)
  [180]=>
  float(-0.681)
  [181]=>
  float(-0.687)
  [182]=>
  float(-0.693)
  [183]=>
  float(-0.699)
  [184]=>
  float(-0.704)
  [185]=>
  float(-0.71)
  [186]=>
  float(-0.716)
  [187]=>
  float(-0.722)
  [188]=>
  float(-0.727)
  [189]=>
  float(-0.733)
  [190]=>
  float(-0.738)
  [191]=>
  float(-0.744)
  [192]=>
  float(-0.749)
  [193]=>
  float(-0.754)
  [194]=>
  float(-0.76)
  [195]=>
  float(-0.765)
  [196]=>
  float(-0.77)
  [197]=>
  float(-0.775)
  [198]=>
  float(-0.78)
}--TEST--
trader_t3() to high time period
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

$close = array ( 568.1, 589.58, 585.56, 585.57, 
601.1, 605.96, 602.5, 599.34, 596.05, 606.98,
614.48, 617.62, 609.86, 599.55, 618.63, 
629.32, 624.31, 633.68, 636.23, 628.44, 626.2,
622.77, 605.23, 580.13, 609.7, 608.34, 
587.44, 572.98, 571.7, 560.28, 610, 607.7,
603, 583.98, 582.13, 585.98, 581.82, 565.25,
569.48, 568.18, 569.18, 570.52, 566.71,
558.22, 553.17, 546.08, 530.12, 530.38, 
561.28, 556.97, 570.56, 565.32, 562.29, 572.27,
579.17, 577.73, 560.99, 564.29, 562.83,
571.46, 571.72, 580.32, 571.17, 576.16, 
572.16, 571.53, 574.13, 585.78, 587.41, 585.74,
577.67, 582.1, 570.77, 572.03, 574.5, 
569.05, 584 );

var_dump(trader_t3($close, 20));

--EXPECT--
bool(false)
--TEST--
trader_t3() basic test
--SKIPIF--
<?php
if (!extension_loaded("trader")) die("skip");
--FILE--
<?php

include "inc/data.php";
include "inc/func.php";

var_dump(trader_t3(get_data("high", $data1)));

--EXPECT--
array(24) {
  [6]=>
  float(60.819)
  [7]=>
  float(60.188)
  [8]=>
  float(59.681)
  [9]=>
  float(59.418)
  [10]=>
  float(59.161)
  [11]=>
  float(58.943)
  [12]=>
  float(58.748)
  [13]=>
  float(58.551)
  [14]=>
  float(58.44)
  [15]=>
  float(58.835)
  [16]=>
  float(59.162)
  [17]=>
  float(60.115)
  [18]=>
  float(60.991)
  [19]=>
  float(61.713)
  [20]=>
  float(62.092)
  [21]=>
  float(62.663)
  [22]=>
  float(63.17)
  [23]=>
  float(64.182)
  [24]=>
  float(65.102)
  [25]=>
  float(65.746)
  [26]=>
  float(65.75)
  [27]=>
  float(65.031)
  [28]=>
  float(64.269)
  [29]=>
  float(63.605)
}

Batosay - 2023
IDNSEO Team