| 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 : /home/deltahospital/.cagefs/tmp/ |
Upload File : |
--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)
}