forked from mirzaev/baza
implement core class and architecture enum
This commit is contained in:
parent
cb06605052
commit
7783dab80b
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\baza;
|
||||
|
||||
// Files of the project
|
||||
use mirzaev\baza\enumerations\architecture;
|
||||
|
||||
|
||||
// Built-in libraries
|
||||
use DomainExceptionn as exception_domain;
|
||||
|
||||
/**
|
||||
* Core
|
||||
*
|
||||
* @package mirzaev/baza
|
||||
*
|
||||
* @method void architecture() Get PHP distribution architecture
|
||||
* @see https://www.php.net/manual/en/function.pack.php#109382
|
||||
*
|
||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
|
||||
final class core
|
||||
{
|
||||
public static function architecture(): ?architecture {
|
||||
return match(PHP_INT_SIZE) {
|
||||
4 => architecture::x86,
|
||||
8 => architecture::x86_64,
|
||||
default => throw new exception_domain('Failed to determinate the system architecture'),
|
||||
};
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ namespace mirzaev\baza;
|
|||
|
||||
// Files of the project
|
||||
use mirzaev\baza\enumerations\encoding,
|
||||
mirzaev\baza\enumerations\architecture,
|
||||
mirzaev\baza\enumerations\type;
|
||||
|
||||
// Built-in libraries
|
||||
|
@ -13,16 +14,6 @@ use LogicException as exception_logic,
|
|||
InvalidArgumentException as exception_invalid_argument,
|
||||
RuntimeException as exception_runtime;
|
||||
|
||||
/**
|
||||
* ARCH
|
||||
*
|
||||
* Checking for PHP implementation architecture
|
||||
*
|
||||
* Using php_uname('m') is another way of doing that
|
||||
* but it's simpler to check for max integer size
|
||||
*/
|
||||
define('ARCH', (PHP_INT_SIZE === 8) ? 64 : 32);
|
||||
|
||||
/**
|
||||
* Database
|
||||
*
|
||||
|
@ -176,7 +167,7 @@ class database
|
|||
*
|
||||
* @param mixed[] $values Values of the record
|
||||
*
|
||||
* @throws exceptiin_invalid_argument if the balue type not matches the column values types
|
||||
* @throws exception_invalid_argument if the balue type not matches the column values types
|
||||
* @throws exception_logic if amount of columns not matches the amount of values
|
||||
*
|
||||
* @return record|null The record instance
|
||||
|
@ -227,7 +218,6 @@ class database
|
|||
* Pack the record values
|
||||
*
|
||||
* @param record $record The record
|
||||
* @const integer ARCH PHP architecture
|
||||
*
|
||||
* @return string Packed values
|
||||
*/
|
||||
|
@ -257,7 +247,7 @@ class database
|
|||
* we got to splice 64-bit integer into two separate longs
|
||||
* next to each other in binary representation
|
||||
*/
|
||||
else if (ARCH === 64 &&
|
||||
else if (core::architecture() === architecture::x86_64 &&
|
||||
($column->type === type::integer ||
|
||||
$column->type === type::integer_unsigned))
|
||||
{
|
||||
|
@ -290,7 +280,6 @@ class database
|
|||
* Unpack binary values and implement them as a `record` instance
|
||||
*
|
||||
* @param array $binaries Binary values in the same order as the columns
|
||||
* @const integer ARCH PHP architecture
|
||||
*
|
||||
* @return record The unpacked record from binary values
|
||||
*/
|
||||
|
@ -321,14 +310,14 @@ class database
|
|||
$unpacked[] = $encoded;
|
||||
}
|
||||
/**
|
||||
* PHP builtin pack() ignores 64-bit integer values
|
||||
p * PHP builtin pack() ignores 64-bit integer values
|
||||
* found on 64-bit PHP distributions
|
||||
* @see https://www.php.net/manual/en/function.pack.php#109382
|
||||
*
|
||||
* In case of integer type on 64-bit PHP distributions
|
||||
* we got to reconstruct previosly spliced integer value
|
||||
*/
|
||||
else if (ARCH === 64 &&
|
||||
else if (core::architecture() === architecture::x86_64 &&
|
||||
($column->type === type::integer ||
|
||||
$column->type === type::integer_unsigned))
|
||||
{
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace mirzaev\baza\enumerations;
|
||||
|
||||
/**
|
||||
* Architecture
|
||||
*
|
||||
* @see https://www.php.net/manual/en/function.pack.php#109382
|
||||
*
|
||||
* @package mirzaev\baza\enumerations
|
||||
*
|
||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||
*/
|
||||
|
||||
enum architecture: int
|
||||
{
|
||||
case x86 = 32;
|
||||
case x86_64 = 64;
|
||||
}
|
|
@ -3,9 +3,11 @@
|
|||
declare(strict_types=1);
|
||||
|
||||
use mirzaev\baza\database,
|
||||
mirzaev\baza\core,
|
||||
mirzaev\baza\record,
|
||||
mirzaev\baza\column,
|
||||
mirzaev\baza\enumerations\encoding,
|
||||
mirzaev\baza\enumerations\architecture,
|
||||
mirzaev\baza\enumerations\type;
|
||||
|
||||
// Initializing path to the composer loader file (main project)
|
||||
|
@ -34,6 +36,9 @@ require($autoload);
|
|||
// Initializing path to the database file
|
||||
$file = __DIR__ . DIRECTORY_SEPARATOR . 'temporary' . DIRECTORY_SEPARATOR . 'database.baza';
|
||||
|
||||
// Initilized architecture runtime constant
|
||||
define('ARCHITECTURE', core::architecture());
|
||||
|
||||
echo "Started testing\n\n\n";
|
||||
|
||||
// Initializing the counter of actions
|
||||
|
@ -53,7 +58,7 @@ if (!file_exists($file) || unlink($file)) {
|
|||
|
||||
// Initializing the test database
|
||||
/* $database = new database() */
|
||||
if (PHP_INT_SIZE === 8) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
$database = (new database())
|
||||
->encoding(encoding::utf8)
|
||||
->columns(
|
||||
|
@ -84,7 +89,7 @@ if (PHP_INT_SIZE === 8) {
|
|||
echo '[' . ++$action . "] Initialized the database\n";
|
||||
|
||||
// Initializing the record
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
$record = $database->record(
|
||||
'Arsen',
|
||||
'Mirzaev',
|
||||
|
@ -114,7 +119,7 @@ echo '[' . ++$action . '][' . ++$test . '][' . ($record->name === 'Arsen' ? 'SUC
|
|||
echo '[' . $action . '][' . ++$test . '][' . ($record->second_name === 'Mirzaev' ? 'SUCCESS' : 'FAIL') . "][\"second_name\"] Expected: \"Mirzaev\" (string). Actual: \"$record->second_name\" (" . gettype($record->second_name) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record->age === 24 ? 'SUCCESS' : 'FAIL') . "][\"age\"] Expected: \"24\" (integer). Actual: \"$record->age\" (" . gettype($record->age) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record->height === 165.5 ? 'SUCCESS' : 'FAIL') . "][\"height\"] Expected: \"165.5\" (double). Actual: \"$record->height\" (" . gettype($record->height) . ")\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record->neuron_count === 91000000000 ? 'SUCCESS' : 'FAIL') . "][\"neuron_count\"] Expected: \"91000000000\" (integer). Actual: \"$record->neuron_count\" (" . gettype($record->neuron_count) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record->motivation === 1.7976931348623E+238 ? 'SUCCESS' : 'FAIL') . "][\"motivation\"] Expected: \"1.7976931348623E+238\" (double). Actual: \"$record->motivation\" (" . gettype($record->motivation) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record->reputation === 7355608 ? 'SUCCESS' : 'FAIL') . "][\"reputation\"] Expected: \"7355608\" (integer). Actual: \"$record->reputation\" (" . gettype($record->reputation) . ")\n";
|
||||
|
@ -132,7 +137,7 @@ $database->write($record);
|
|||
echo '[' . ++$action . "] Writed the record into the database\n";
|
||||
|
||||
// Initializing the second record
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
$record_ivan = $database->record(
|
||||
'Ivan',
|
||||
'Ivanov',
|
||||
|
@ -161,7 +166,7 @@ $database->write($record_ivan);
|
|||
echo '[' . ++$action . "] Writed the record into the database\n";
|
||||
|
||||
// Initializing the second record
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
$record_margarita = $database->record(
|
||||
'Margarita',
|
||||
'Esenina',
|
||||
|
@ -199,7 +204,7 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . (count($records_readed_all) === 3 ? 'SUCCESS' : 'FAIL') . '][amount of readed records] Expected: 3 records. Actual: ' . count($records_readed_all) . " records\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . (gettype($records_readed_all[0]) === 'object' ? 'SUCCESS' : 'FAIL') . '][type of readed values] Expected: "object". Actual: "' . gettype($records_readed_all[0]) . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_all[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $records_readed_all[0]::class . "\"\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_all[0]->neuron_count === 91000000000 ? 'SUCCESS' : 'FAIL') . ']["neuron_count"] Expected: "91000000000" (integer). Actual: "' . $records_readed_all[0]->neuron_count . '" (' . gettype($records_readed_all[0]->neuron_count) . ")\n";
|
||||
}
|
||||
|
||||
|
@ -222,7 +227,7 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . (gettype($record_readed_first[0]) === 'object' ? 'SUCCESS' : 'FAIL') . '][type of readed values] Expected: "object". Actual: "' . gettype($record_readed_first[0]) . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_first[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $record_readed_first[0]::class . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_first[0]->second_name === 'Mirzaev' ? 'SUCCESS' : 'FAIL') . ']["second_name"] Expected: "Mirzaev" (string). Actual: "' . $record_readed_first[0]->second_name . '" (' . gettype($record_readed_first[0]->second_name) . ")\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_first[0]->neuron_count === 91000000000 ? 'SUCCESS' : 'FAIL') . ']["neuron_count"] Expected: "91000000000" (integer). Actual: "' . $record_readed_first[0]->neuron_count . '" (' . gettype($record_readed_first[0]->neuron_count) . ")\n";
|
||||
}
|
||||
|
||||
|
@ -245,9 +250,9 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . (gettype($record_readed_second[0]) === 'object' ? 'SUCCESS' : 'FAIL') . '][type of readed values] Expected: "object". Actual: "' . gettype($record_readed_second[0]) . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_second[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $record_readed_second[0]::class . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_second[0]->second_name === 'Ivanov' ? 'SUCCESS' : 'FAIL') . ']["second_name"] Expected: "Ivanov" (string). Actual: "' . $record_readed_second[0]->second_name . '" (' . gettype($record_readed_second[0]->second_name) . ")\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
/**
|
||||
* Due to IEEE 754 double precision format double equility is problematic
|
||||
* Due to IEEE 754 double precision format double equality is problematic
|
||||
*
|
||||
* @see https://www.php.net/manual/en/language.types.float.php#113703
|
||||
*/
|
||||
|
@ -274,9 +279,9 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . (gettype($record_readed_filter[0]) === 'object' ? 'SUCCESS' : 'FAIL') . '][type of readed values] Expected: "object". Actual: "' . gettype($record_readed_filter[0]) . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_filter[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $record_readed_filter[0]::class . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($record_readed_filter[0]->second_name === 'Ivanov' ? 'SUCCESS' : 'FAIL') . ']["second_name"] Expected: "Ivanov" (string). Actual: "' . $record_readed_filter[0]->second_name . '" (' . gettype($record_readed_filter[0]->second_name) . ")\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
/**
|
||||
* Due to IEEE 754 double precision format double equility is problematic
|
||||
* Due to IEEE 754 double precision format double equality is problematic
|
||||
*
|
||||
* @see https://www.php.net/manual/en/language.types.float.php#113703
|
||||
*/
|
||||
|
@ -304,9 +309,9 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_amount[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $records_readed_filter_amount[0]::class . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_amount[0]->age === 24 ? 'SUCCESS' : 'FAIL') . ']["age"] Expected: "24" (integer). Actual: "' . $records_readed_filter_amount[0]->age . '" (' . gettype($records_readed_filter_amount[0]->age) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_amount[0]->second_name === 'Mirzaev' ? 'SUCCESS' : 'FAIL') . ']["second_name"] Expected: "Mirzaev" (string). Actual: "' . $records_readed_filter_amount[0]->second_name . '" (' . gettype($records_readed_filter_amount[0]->second_name) . ")\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
/**
|
||||
* Due to IEEE 754 double precision format double equility is problematic
|
||||
* Due to IEEE 754 double precision format double equality is problematic
|
||||
*
|
||||
* @see https://www.php.net/manual/en/language.types.float.php#113703
|
||||
*/
|
||||
|
@ -334,9 +339,9 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_amount_offset[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $records_readed_filter_amount_offset[0]::class . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_amount_offset[0]->age === 24 ? 'SUCCESS' : 'FAIL') . ']["age"] Expected: "24" (integer). Actual: "' . $records_readed_filter_amount_offset[0]->age . '" (' . gettype($records_readed_filter_amount_offset[0]->age) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_amount_offset[0]->second_name === 'Ivanov' ? 'SUCCESS' : 'FAIL') . ']["second_name"] Expected: "Ivanov" (string). Actual: "' . $records_readed_filter_amount_offset[0]->second_name . '" (' . gettype($records_readed_filter_amount_offset[0]->second_name) . ")\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
/**
|
||||
* Due to IEEE 754 double precision format double equility is problematic
|
||||
* Due to IEEE 754 double precision format double equality is problematic
|
||||
*
|
||||
* @see https://www.php.net/manual/en/language.types.float.php#113703
|
||||
*/
|
||||
|
@ -369,9 +374,9 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_delete[0] instanceof record ? 'SUCCESS' : 'FAIL') . '][class of readed object values] Expected: "' . record::class . '". Actual: "' . $records_readed_filter_delete[0]::class . "\"\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_delete[0]->name === 'Ivan' ? 'SUCCESS' : 'FAIL') . ']["name"] Expected: "Ivan" (string). Actual: "' . $records_readed_filter_delete[0]->second_name . '" (' . gettype($records_readed_filter_delete[0]->second_name) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . (count($records_readed_filter_delete_readed) === 2 ? 'SUCCESS' : 'FAIL') . '][amount of readed records after deleting] Expected: 2 records. Actual: ' . count($records_readed_filter_delete_readed) . " records\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
/**
|
||||
* Due to IEEE 754 double precision format double equility is problematic
|
||||
* Due to IEEE 754 double precision format double equality is problematic
|
||||
*
|
||||
* @see https://www.php.net/manual/en/language.types.float.php#113703
|
||||
*/
|
||||
|
@ -405,9 +410,9 @@ try {
|
|||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_update[0]->height === 165.5 ? 'SUCCESS' : 'FAIL') . ']["height"] Expected: "165.5" (double). Actual: "' . $records_readed_filter_update[0]->height . '" (' . gettype($records_readed_filter_update[0]->height) . ")\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . (count($records_readed_filter_update_readed) === 2 ? 'SUCCESS' : 'FAIL') . '][amount of readed records after updating] Expected: 2 records. Actual: ' . count($records_readed_filter_update_readed) . " records\n";
|
||||
echo '[' . $action . '][' . ++$test . '][' . ($records_readed_filter_update_readed[1]->height === $records_readed_filter_update[0]->height ? 'SUCCESS' : 'FAIL') . "] Height from `update` process response matched height from the `read` preocess response\n";
|
||||
if (ARCH === 64) {
|
||||
if (ARCHITECTURE === architecture::x86_64) {
|
||||
/**
|
||||
* Due to IEEE 754 double precision format double equility is problematic
|
||||
* Due to IEEE 754 double precision format double equality is problematic
|
||||
*
|
||||
* @see https://www.php.net/manual/en/language.types.float.php#113703
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue