Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions commands_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2412,6 +2412,77 @@ var _ = Describe("Commands", func() {

Expect(args).To(Equal(expectedArgs))
})

It("should IncrByFloat with edge cases", func() {
// Test with negative increment
set := client.Set(ctx, "key", "10.5", 0)
Expect(set.Err()).NotTo(HaveOccurred())

incrByFloat := client.IncrByFloat(ctx, "key", -2.3)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(BeNumerically("~", 8.2, 0.0001))

// Test with zero increment (should return current value)
incrByFloat = client.IncrByFloat(ctx, "key", 0.0)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(BeNumerically("~", 8.2, 0.0001))

// Test with very small increment (precision test)
incrByFloat = client.IncrByFloat(ctx, "key", 0.0001)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(BeNumerically("~", 8.2001, 0.00001))

// Test with non-existent key (should start from 0)
incrByFloat = client.IncrByFloat(ctx, "nonexistent", 5.5)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(Equal(5.5))

// Test with integer value stored as string
set = client.Set(ctx, "intkey", "42", 0)
Expect(set.Err()).NotTo(HaveOccurred())

incrByFloat = client.IncrByFloat(ctx, "intkey", 0.5)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(Equal(42.5))

// Test with scientific notation
set = client.Set(ctx, "scikey", "1.5e2", 0)
Expect(set.Err()).NotTo(HaveOccurred())

incrByFloat = client.IncrByFloat(ctx, "scikey", 5.0)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(Equal(155.0))

// Test with negative scientific notation
incrByFloat = client.IncrByFloat(ctx, "scikey", -1.5e1)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(Equal(140.0))

// Test error case: non-numeric value
set = client.Set(ctx, "stringkey", "notanumber", 0)
Expect(set.Err()).NotTo(HaveOccurred())

incrByFloat = client.IncrByFloat(ctx, "stringkey", 1.0)
Expect(incrByFloat.Err()).To(HaveOccurred())
Expect(incrByFloat.Err().Error()).To(ContainSubstring("value is not a valid float"))

// Test with very large numbers
set = client.Set(ctx, "largekey", "1.7976931348623157e+308", 0)
Expect(set.Err()).NotTo(HaveOccurred())

// This should work as it's within float64 range
incrByFloat = client.IncrByFloat(ctx, "largekey", -1.0e+308)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(BeNumerically("~", 7.976931348623157e+307, 1e+300))

// Test with very small numbers (near zero)
set = client.Set(ctx, "smallkey", "1e-10", 0)
Expect(set.Err()).NotTo(HaveOccurred())

incrByFloat = client.IncrByFloat(ctx, "smallkey", 1e-10)
Expect(incrByFloat.Err()).NotTo(HaveOccurred())
Expect(incrByFloat.Val()).To(BeNumerically("~", 2e-10, 1e-15))
})
})

Describe("hashes", func() {
Expand Down
Loading