Assigning to dur after b.jitter check (#79)

* Assigning to dur after b.jitter check

* Test cases added for jitter set to true scenario
diff --git a/util.go b/util.go
index c6797cb..89ca54d 100644
--- a/util.go
+++ b/util.go
@@ -92,11 +92,11 @@
 	if duration > math.MaxInt64 {
 		return b.max
 	}
-	dur := time.Duration(duration)
 
 	if b.jitter {
 		duration = rand.Float64()*(duration-initial) + initial
 	}
+	dur := time.Duration(duration)
 
 	if dur > b.max {
 		return b.max
diff --git a/util_test.go b/util_test.go
index 4ee7845..3909dab 100644
--- a/util_test.go
+++ b/util_test.go
@@ -49,6 +49,18 @@
 			Expect(4).To(Equal(b.Attempt()))
 		})
 
+		It("should properly apply exponential backoff strategy with jitter set to true", func() {
+			b := NewExponentialBackoff(200*time.Millisecond, 2*time.Second, 2, true)
+			Expect(200 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(1).To(Equal(b.Attempt()))
+			Expect(400 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(2).To(Equal(b.Attempt()))
+			Expect(800 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(3).To(Equal(b.Attempt()))
+			Expect(1600 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(4).To(Equal(b.Attempt()))
+		})
+
 		It("should reset properly", func() {
 			b := NewExponentialBackoff(200*time.Millisecond, 2*time.Second, 2, false)
 			Expect(200 * time.Millisecond).To(Equal(b.Duration()))
@@ -65,6 +77,23 @@
 			Expect(800 * time.Millisecond).To(Equal(b.Duration()))
 			Expect(3).To(Equal(b.Attempt()))
 		})
+
+		It("should reset properly with jitter set to true", func() {
+			b := NewExponentialBackoff(200*time.Millisecond, 2*time.Second, 2, true)
+			Expect(200 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(1).To(Equal(b.Attempt()))
+			Expect(400 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(2).To(Equal(b.Attempt()))
+			Expect(800 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(3).To(Equal(b.Attempt()))
+			b.Reset()
+			Expect(200 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(1).To(Equal(b.Attempt()))
+			Expect(400 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(2).To(Equal(b.Attempt()))
+			Expect(800 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds())))
+			Expect(3).To(Equal(b.Attempt()))
+		})
 	})
 
 })