aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-03-03 07:55:10 +0800
committerobscuren <geffobscura@gmail.com>2014-03-03 07:55:10 +0800
commitd2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d (patch)
treec7d976bb1f3db543c025329fc48eb4a84cb5eb65
parentd65b4cd0dd49975410374801fae3ece7d7e087b3 (diff)
downloadgo-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.tar
go-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.tar.gz
go-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.tar.bz2
go-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.tar.lz
go-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.tar.xz
go-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.tar.zst
go-tangerine-d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d.zip
PoC reactor pattern
-rw-r--r--ethutil/common_test.go43
-rw-r--r--ethutil/reactor.go9
2 files changed, 44 insertions, 8 deletions
diff --git a/ethutil/common_test.go b/ethutil/common_test.go
index 3a6a37ff5..b5c733ff3 100644
--- a/ethutil/common_test.go
+++ b/ethutil/common_test.go
@@ -1,17 +1,44 @@
package ethutil
import (
- "fmt"
"math/big"
"testing"
)
func TestCommon(t *testing.T) {
- fmt.Println(CurrencyToString(BigPow(10, 19)))
- fmt.Println(CurrencyToString(BigPow(10, 16)))
- fmt.Println(CurrencyToString(BigPow(10, 13)))
- fmt.Println(CurrencyToString(BigPow(10, 10)))
- fmt.Println(CurrencyToString(BigPow(10, 7)))
- fmt.Println(CurrencyToString(BigPow(10, 4)))
- fmt.Println(CurrencyToString(big.NewInt(10)))
+ ether := CurrencyToString(BigPow(10, 19))
+ finney := CurrencyToString(BigPow(10, 16))
+ szabo := CurrencyToString(BigPow(10, 13))
+ vito := CurrencyToString(BigPow(10, 10))
+ turing := CurrencyToString(BigPow(10, 7))
+ eins := CurrencyToString(BigPow(10, 4))
+ wei := CurrencyToString(big.NewInt(10))
+
+ if ether != "10 Ether" {
+ t.Error("Got", ether)
+ }
+
+ if finney != "10 Finney" {
+ t.Error("Got", finney)
+ }
+
+ if szabo != "10 Szabo" {
+ t.Error("Got", szabo)
+ }
+
+ if vito != "10 Vito" {
+ t.Error("Got", vito)
+ }
+
+ if turing != "10 Turing" {
+ t.Error("Got", turing)
+ }
+
+ if eins != "10 Eins" {
+ t.Error("Got", eins)
+ }
+
+ if wei != "10 Wei" {
+ t.Error("Got", wei)
+ }
}
diff --git a/ethutil/reactor.go b/ethutil/reactor.go
index b3f8b9b5b..f8084986c 100644
--- a/ethutil/reactor.go
+++ b/ethutil/reactor.go
@@ -13,6 +13,9 @@ type ReactorEvent struct {
// Post the specified reactor resource on the channels
// currently subscribed
func (e *ReactorEvent) Post(react React) {
+ e.mut.Lock()
+ defer e.mut.Unlock()
+
for _, ch := range e.chans {
go func(ch chan React) {
ch <- react
@@ -22,11 +25,17 @@ func (e *ReactorEvent) Post(react React) {
// Add a subscriber to this event
func (e *ReactorEvent) Add(ch chan React) {
+ e.mut.Lock()
+ defer e.mut.Unlock()
+
e.chans = append(e.chans, ch)
}
// Remove a subscriber
func (e *ReactorEvent) Remove(ch chan React) {
+ e.mut.Lock()
+ defer e.mut.Unlock()
+
for i, c := range e.chans {
if c == ch {
e.chans = append(e.chans[:i], e.chans[i+1:]...)