From d2bc57cd34fe4da3ecec3ff95bc4ef9e74589e5d Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 3 Mar 2014 00:55:10 +0100
Subject: [PATCH] PoC reactor pattern

---
 ethutil/common_test.go | 43 ++++++++++++++++++++++++++++++++++--------
 ethutil/reactor.go     |  9 +++++++++
 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:]...)
-- 
GitLab