Skip to content

Commit b7575e0

Browse files
committed
bitmask instance should be treated as a whole
1 parent 5e8b151 commit b7575e0

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

composer.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@
4747
"machine",
4848
"transition",
4949
"validation",
50-
"rules"
50+
"rules",
51+
"bitmask",
52+
"bitmasks",
53+
"macros",
54+
"macroable"
5155
],
5256
"homepage": "https://github.com/henzeb/enumhancer",
5357
"license": "AGPL-3.0-only",

src/Helpers/Bitmasks/Bitmask.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ public function any(self|UnitEnum|string|int ...$bits): bool
4141
return true;
4242
}
4343

44-
return ($this->value() & $mask) > 0;
44+
foreach ($bits as $bit) {
45+
if ($this->has($bit)) {
46+
return true;
47+
}
48+
}
49+
50+
return false;
4551
}
4652

4753
public function xor(self|UnitEnum|string|int ...$bits): bool
@@ -75,7 +81,7 @@ public function none(self|UnitEnum|string|int ...$bits): bool
7581
return true;
7682
}
7783

78-
return ($this->value() & $mask) === 0;
84+
return !$this->any(...$bits);
7985
}
8086

8187
public function value(): int

src/Laravel/Mixins/RulesMixin.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
use Henzeb\Enumhancer\Contracts\TransitionHook;
88
use Henzeb\Enumhancer\Laravel\Rules\EnumBitmask;
99
use Henzeb\Enumhancer\Laravel\Rules\EnumTransition;
10-
use Henzeb\Enumhancer\Laravel\Rules\IsEnum as UnitEnumRule;
10+
use Henzeb\Enumhancer\Laravel\Rules\IsEnum;
1111
use UnitEnum;
1212

1313
class RulesMixin
1414
{
1515
public function isEnum(): Closure
1616
{
17-
return function (string $type, Mapper|string|array|null ...$mappers): UnitEnumRule {
18-
return new UnitEnumRule($type, ...$mappers);
17+
return function (string $type, Mapper|string|array|null ...$mappers): IsEnum {
18+
return new IsEnum($type, ...$mappers);
1919
};
2020
}
2121

tests/Unit/Helpers/Bitmasks/BitmaskTest.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use Henzeb\Enumhancer\Tests\Fixtures\BackedEnums\Bitmasks\BitmasksIncorrectIntEnum;
88
use Henzeb\Enumhancer\Tests\Fixtures\BackedEnums\Bitmasks\BitmasksIntEnum;
99
use Henzeb\Enumhancer\Tests\Fixtures\EnhancedUnitEnum;
10-
use InvalidArgumentException;
1110
use PHPUnit\Framework\TestCase;
1211

1312
class BitmaskTest extends TestCase
@@ -100,8 +99,8 @@ public function testAny()
10099
$this->assertTrue($bitmask->any(new Bitmask(BitmasksIntEnum::class, 0)));
101100
$this->assertTrue($bitmask->any(new Bitmask(BitmasksIntEnum::class, 24)));
102101
$this->assertFalse($bitmask->any(new Bitmask(BitmasksIntEnum::class, 32)));
103-
$this->assertTrue($bitmask->any(new Bitmask(BitmasksIntEnum::class, 40)));
104-
$this->assertTrue($bitmask->any(new Bitmask(BitmasksIntEnum::class, 56)));
102+
$this->assertFalse($bitmask->any(new Bitmask(BitmasksIntEnum::class, 40)));
103+
$this->assertFalse($bitmask->any(new Bitmask(BitmasksIntEnum::class, 56)));
105104

106105
$this->assertTrue($bitmask->any());
107106
$this->assertTrue($bitmask->any(8, 16));
@@ -183,6 +182,14 @@ public function testNone()
183182
$this->assertTrue($bitmask->none('Write'));
184183
$this->assertTrue($bitmask->none('Read', 'Write'));
185184
$this->assertFalse($bitmask->none('Execute', 'Read'));
185+
186+
$bitmask = new Bitmask(BitmasksIntEnum::class, 40);
187+
188+
$this->assertTrue(
189+
$bitmask->none(
190+
new Bitmask(BitmasksIntEnum::class, 24),
191+
)
192+
);
186193
}
187194

188195
public function testCases()

0 commit comments

Comments
 (0)