<?php
declare(strict_types=1);
namespace think {class Config {public static $driver='mysql';public static function get($key){return $key==='database.type'?self::$driver:null;}}}
namespace {
$root=$argv[1]??'';require $root.'/application/p/logic/Equipment.php';require $root.'/application/m/logic/Dishes.php';$checks=0;$fail=[];
$same=static function($want,$actual,string $name)use(&$checks,&$fail):void{$checks++;if($want!==$actual){$fail[]=$name;}};
$spec=[['app\\p\\logic\\Equipment','normalizeEquipmentReadResponse',['left_dishes_weight','left_dishes_weight_max','right_dishes_weight','right_dishes_weight_max'],['create_time','update_time','face_time','push_dishes_time']],['app\\m\\logic\\Dishes','normalizeRecipeLookupResponse',['weight','raw_flag_weight','energy','carbohydrate','protein','fat','sfa','mufa','pufa','cholesterol','va','renieratene','retinol','vb1','vb2','vpp','vc','ve','folic_acid','biotin','pantothenic_acid','choline','potassium','sodium','calcium','magnesium','iron','zinc','selenium','gi','gl','purine','dietary_fiber','moisture','ash','iodine','phosphorus','cuprum','manganese'],['create_time','create_times','update_time']]];
foreach($spec as [$class,$method,$decimals,$dates]){$reflection=new \ReflectionClass($class);if(!$reflection->hasMethod($method)){$same(true,false,$class.'.missing_helper');continue;}$instance=$reflection->newInstanceWithoutConstructor();$m=$reflection->getMethod($method);$m->setAccessible(true);$call=static function(array $row)use($m,$instance):array{return $m->invoke($instance,$row);};
    foreach($decimals as $field){\think\Config::$driver='app\\cores\\database\\Dm';foreach([[0,'0.00'],[0.01,'0.01'],[12.34,'12.34'],[99999999.99,'99999999.99'],[null,null],['123.40','123.40']] as [$value,$want]){$same([$field=>$want],$call([$field=>$value]),$method.'.'.$field.'.decimal');}\think\Config::$driver='mysql';$row=[$field=>0];$same($row,$call($row),$method.'.mysql_unchanged');}
    \think\Config::$driver='app\\cores\\database\\Dm';foreach($dates as $field){foreach([['2026-10-10 12:34:56.000000','2026-10-10 12:34:56'],['2026-10-10 12:34:56.0','2026-10-10 12:34:56'],['2026-10-10 12:34:56.000001','2026-10-10 12:34:56.000001'],['2026-02-31 12:34:56.000000','2026-02-31 12:34:56.000000'],['2026-10-10 24:34:56.000000','2026-10-10 24:34:56.000000'],[null,null],['',''],['0000-00-00 00:00:00.000000','0000-00-00 00:00:00.000000']] as [$value,$want]){$same([$field=>$want],$call([$field=>$value]),$method.'.'.$field.'.date');}\think\Config::$driver='mysql';$row=[$field=>'2026-10-10 12:34:56.000000'];$same($row,$call($row),$method.'.mysql_date_unchanged');\think\Config::$driver='app\\cores\\database\\Dm';}
    $row=['price'=>0.01,'saccharides'=>1.5,'ssb'=>0,'id'=>1,'unknown_decimal'=>1.2,'meal_times'=>'1','unknown_time'=>'2026-10-10 12:34:56.000000'];$same($row,$call($row),$method.'.unlisted_and_float_int_unchanged');
}
echo json_encode(['assertions'=>$checks,'failures'=>$fail,'business_database_operations'=>0]),PHP_EOL;exit($fail?1:0);
}
