Skip to content

Commit 89cbc1a

Browse files
Add support for new bitop operations
1 parent 6871741 commit 89cbc1a

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

bitmap_commands.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ type BitMapCmdable interface {
1212
BitOpAnd(ctx context.Context, destKey string, keys ...string) *IntCmd
1313
BitOpOr(ctx context.Context, destKey string, keys ...string) *IntCmd
1414
BitOpXor(ctx context.Context, destKey string, keys ...string) *IntCmd
15+
BitOpDiff(ctx context.Context, destKey string, keys ...string) *IntCmd
16+
BitOpDiff1(ctx context.Context, destKey string, keys ...string) *IntCmd
17+
BitOpAndOr(ctx context.Context, destKey string, keys ...string) *IntCmd
18+
BitOpOne(ctx context.Context, destKey string, keys ...string) *IntCmd
1519
BitOpNot(ctx context.Context, destKey string, key string) *IntCmd
1620
BitPos(ctx context.Context, key string, bit int64, pos ...int64) *IntCmd
1721
BitPosSpan(ctx context.Context, key string, bit int8, start, end int64, span string) *IntCmd
@@ -90,6 +94,22 @@ func (c cmdable) BitOpXor(ctx context.Context, destKey string, keys ...string) *
9094
return c.bitOp(ctx, "xor", destKey, keys...)
9195
}
9296

97+
func (c cmdable) BitOpDiff(ctx context.Context, destKey string, keys ...string) *IntCmd {
98+
return c.bitOp(ctx, "diff", destKey, keys...)
99+
}
100+
101+
func (c cmdable) BitOpDiff1(ctx context.Context, destKey string, keys ...string) *IntCmd {
102+
return c.bitOp(ctx, "diff1", destKey, keys...)
103+
}
104+
105+
func (c cmdable) BitOpAndOr(ctx context.Context, destKey string, keys ...string) *IntCmd {
106+
return c.bitOp(ctx, "andor", destKey, keys...)
107+
}
108+
109+
func (c cmdable) BitOpOne(ctx context.Context, destKey string, keys ...string) *IntCmd {
110+
return c.bitOp(ctx, "one", destKey, keys...)
111+
}
112+
93113
func (c cmdable) BitOpNot(ctx context.Context, destKey string, key string) *IntCmd {
94114
return c.bitOp(ctx, "not", destKey, key)
95115
}

commands_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,78 @@ var _ = Describe("Commands", func() {
14691469
Expect(get.Val()).To(Equal("\xf0"))
14701470
})
14711471

1472+
It("should BitOpDiff", Label("NonRedisEnterprise"), func() {
1473+
set := client.Set(ctx, "key1", "\xff", 0)
1474+
Expect(set.Err()).NotTo(HaveOccurred())
1475+
Expect(set.Val()).To(Equal("OK"))
1476+
1477+
set = client.Set(ctx, "key2", "\x0f", 0)
1478+
Expect(set.Err()).NotTo(HaveOccurred())
1479+
Expect(set.Val()).To(Equal("OK"))
1480+
1481+
bitOpDiff := client.BitOpDiff(ctx, "dest", "key1", "key2")
1482+
Expect(bitOpDiff.Err()).NotTo(HaveOccurred())
1483+
Expect(bitOpDiff.Val()).To(Equal(int64(1)))
1484+
1485+
get := client.Get(ctx, "dest")
1486+
Expect(get.Err()).NotTo(HaveOccurred())
1487+
Expect(get.Val()).To(Equal("\xf0"))
1488+
})
1489+
1490+
It("should BitOpDiff1", Label("NonRedisEnterprise"), func() {
1491+
set := client.Set(ctx, "key1", "\xff", 0)
1492+
Expect(set.Err()).NotTo(HaveOccurred())
1493+
Expect(set.Val()).To(Equal("OK"))
1494+
1495+
set = client.Set(ctx, "key2", "\x0f", 0)
1496+
Expect(set.Err()).NotTo(HaveOccurred())
1497+
Expect(set.Val()).To(Equal("OK"))
1498+
1499+
bitOpDiff1 := client.BitOpDiff1(ctx, "dest", "key1", "key2")
1500+
Expect(bitOpDiff1.Err()).NotTo(HaveOccurred())
1501+
Expect(bitOpDiff1.Val()).To(Equal(int64(1)))
1502+
1503+
get := client.Get(ctx, "dest")
1504+
Expect(get.Err()).NotTo(HaveOccurred())
1505+
Expect(get.Val()).To(Equal("\xf0"))
1506+
})
1507+
1508+
It("should BitOpAndOr", Label("NonRedisEnterprise"), func() {
1509+
set := client.Set(ctx, "key1", "\xff", 0)
1510+
Expect(set.Err()).NotTo(HaveOccurred())
1511+
Expect(set.Val()).To(Equal("OK"))
1512+
1513+
set = client.Set(ctx, "key2", "\x0f", 0)
1514+
Expect(set.Err()).NotTo(HaveOccurred())
1515+
Expect(set.Val()).To(Equal("OK"))
1516+
1517+
bitOpAndOr := client.BitOpAndOr(ctx, "dest", "key1", "key2")
1518+
Expect(bitOpAndOr.Err()).NotTo(HaveOccurred())
1519+
Expect(bitOpAndOr.Val()).To(Equal(int64(1)))
1520+
1521+
get := client.Get(ctx, "dest")
1522+
Expect(get.Err()).NotTo(HaveOccurred())
1523+
Expect(get.Val()).To(Equal("\xf0"))
1524+
})
1525+
1526+
It("should BitOpOne", Label("NonRedisEnterprise"), func() {
1527+
set := client.Set(ctx, "key1", "\xff", 0)
1528+
Expect(set.Err()).NotTo(HaveOccurred())
1529+
Expect(set.Val()).To(Equal("OK"))
1530+
1531+
set = client.Set(ctx, "key2", "\x0f", 0)
1532+
Expect(set.Err()).NotTo(HaveOccurred())
1533+
Expect(set.Val()).To(Equal("OK"))
1534+
1535+
bitOpOne := client.BitOpOne(ctx, "dest", "key1", "key2")
1536+
Expect(bitOpOne.Err()).NotTo(HaveOccurred())
1537+
Expect(bitOpOne.Val()).To(Equal(int64(1)))
1538+
1539+
get := client.Get(ctx, "dest")
1540+
Expect(get.Err()).NotTo(HaveOccurred())
1541+
Expect(get.Val()).To(Equal("\xf0"))
1542+
})
1543+
14721544
It("should BitOpNot", Label("NonRedisEnterprise"), func() {
14731545
set := client.Set(ctx, "key1", "\x00", 0)
14741546
Expect(set.Err()).NotTo(HaveOccurred())

0 commit comments

Comments
 (0)