value())->toBe(1); }); it('exposes its case name', function (): void { // THEN expect(Currency::EUR->name())->toBe('EUR'); }); it('returns the defined label', function (): void { // THEN expect(Currency::EUR->label())->toBe('Euro'); }); it('lists all labels keyed by case name', function (): void { // THEN expect(Currency::toLabels())->toBe([ 'EUR' => 'Euro', ]); }); it('lists all values keyed by case name', function (): void { // THEN expect(Currency::toValues())->toBe([ 'EUR' => 1, ]); }); it('makes an instance from its backing value', function (): void { // THEN expect(Currency::make(1))->toBe(Currency::EUR); }); it('makes an instance from a label', function (): void { // THEN expect(Currency::make('Euro', 'label'))->toBe(Currency::EUR); }); it('returns the same instance when already an enum case', function (): void { // THEN expect(Currency::make(Currency::EUR))->toBe(Currency::EUR); }); it('returns null for an unknown value', function (): void { // THEN expect(Currency::make(99))->toBeNull(); }); it('implements equals correctly', function (): void { // THEN expect(Currency::EUR->equals(Currency::EUR))->toBeTrue() ->and(Currency::EUR->equals(null))->toBeFalse(); }); });