1<?php 2 3namespace Rubix\ML\Tests\Persisters\Serializers; 4 5use Rubix\ML\Encoding; 6use Rubix\ML\Persistable; 7use Rubix\ML\Classifiers\DummyClassifier; 8use Rubix\ML\Persisters\Serializers\Native; 9use Rubix\ML\Persisters\Serializers\Serializer; 10use PHPUnit\Framework\TestCase; 11use Rubix\ML\Exceptions\RuntimeException; 12use stdClass; 13 14use function serialize; 15 16/** 17 * @group Serializers 18 * @covers \Rubix\ML\Persisters\Serializers\Native 19 */ 20class NativeTest extends TestCase 21{ 22 /** 23 * @var \Rubix\ML\Persistable 24 */ 25 protected $persistable; 26 27 /** 28 * @var \Rubix\ML\Persisters\Serializers\Native 29 */ 30 protected $serializer; 31 32 /** 33 * @before 34 */ 35 protected function setUp() : void 36 { 37 $this->serializer = new Native(); 38 39 $this->persistable = new DummyClassifier(); 40 } 41 42 /** 43 * @test 44 */ 45 public function build() : void 46 { 47 $this->assertInstanceOf(Native::class, $this->serializer); 48 $this->assertInstanceOf(Serializer::class, $this->serializer); 49 } 50 51 /** 52 * @test 53 */ 54 public function serializeUnserialize() : void 55 { 56 $data = $this->serializer->serialize($this->persistable); 57 58 $this->assertInstanceOf(Encoding::class, $data); 59 60 $persistable = $this->serializer->unserialize($data); 61 62 $this->assertInstanceOf(DummyClassifier::class, $persistable); 63 $this->assertInstanceOf(Persistable::class, $persistable); 64 } 65 66 /** 67 * @return array<mixed> 68 */ 69 public function deserializeInvalidData() : array 70 { 71 return [ 72 [3], 73 [new stdClass()], 74 ]; 75 } 76 77 /** 78 * @test 79 * 80 * @param mixed $obj 81 * 82 * @dataProvider deserializeInvalidData 83 */ 84 public function deserializeBadData($obj) : void 85 { 86 $data = new Encoding(serialize($obj)); 87 88 $this->expectException(RuntimeException::class); 89 90 $this->serializer->unserialize($data); 91 } 92} 93