From dc31b5bde1a7ec55eb05197089da256f388ce43e Mon Sep 17 00:00:00 2001 From: capossele <angelocapossele@gmail.com> Date: Thu, 26 Mar 2020 19:17:07 +0000 Subject: [PATCH] :sparkles: adds Float64() --- packages/binary/drng/state/state.go | 16 +++++++++++----- packages/binary/drng/state/state_test.go | 9 +++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/binary/drng/state/state.go b/packages/binary/drng/state/state.go index b0a89b50..f29f2253 100644 --- a/packages/binary/drng/state/state.go +++ b/packages/binary/drng/state/state.go @@ -1,6 +1,7 @@ package state import ( + "encoding/binary" "sync" "time" @@ -13,6 +14,11 @@ type Randomness struct { Timestamp time.Time } +// Float64 returns a float64 [0.0,1.0) rapresentation of the randomness byte slice +func (r Randomness) Float64() float64 { + return float64(binary.BigEndian.Uint64(r.Randomness[:8])>>11) / (1 << 53) +} + type Committee struct { InstanceID uint32 Threshold uint8 @@ -21,7 +27,7 @@ type Committee struct { } type State struct { randomness *Randomness - committe *Committee + committee *Committee mutex sync.RWMutex } @@ -34,7 +40,7 @@ func New(setters ...Option) *State { } return &State{ randomness: args.Randomness, - committe: args.Committee, + committee: args.Committee, } } @@ -56,14 +62,14 @@ func (s *State) Randomness() Randomness { func (s *State) SetCommittee(c *Committee) { s.mutex.Lock() defer s.mutex.Unlock() - s.committe = c + s.committee = c } func (s *State) Committee() Committee { s.mutex.RLock() defer s.mutex.RUnlock() - if s.committe == nil { + if s.committee == nil { return Committee{} } - return *s.committe + return *s.committee } diff --git a/packages/binary/drng/state/state_test.go b/packages/binary/drng/state/state_test.go index 314241ed..ac8c881b 100644 --- a/packages/binary/drng/state/state_test.go +++ b/packages/binary/drng/state/state_test.go @@ -40,3 +40,12 @@ func TestState(t *testing.T) { stateTest.SetRandomness(newRandomness) require.Equal(t, *newRandomness, stateTest.Randomness()) } + +func TestFloat64(t *testing.T) { + + max := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} + r := &Randomness{1, max, time.Now()} + stateTest := New(SetRandomness(r)) + require.Equal(t, 0.9999999999999999, stateTest.Randomness().Float64()) + +} -- GitLab