From 9bd34c97d05499a9dc5922481470de04efa147aa Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 8 Apr 2015 00:34:47 +0200 Subject: Split files --- main.go | 121 +++------------------------------------------------------------- 1 file changed, 4 insertions(+), 117 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index f62cfb2..62e50db 100644 --- a/main.go +++ b/main.go @@ -1,123 +1,10 @@ package main -import ( - "container/list" - "fmt" - "log" - "math/rand" - "time" -) - -var ( - alphabet *list.List - zero, one *list.Element -) - -// next returns next char in alphabet -func next(n *list.Element) *list.Element { - if nxt := n.Next(); nxt != nil { - return nxt - } - log.Fatal("out of range", n.Value) - return nil -} - -// prev returns previous char in alphabet -func prev(n *list.Element) *list.Element { - if prv := n.Prev(); prv != nil { - return prv - } - return zero -} - -// add defines addition -func add(m, n *list.Element) *list.Element { - if m == zero { - return n - } - return next(add(prev(m), n)) -} - -// times defines mutiplication -func times(m, n *list.Element) *list.Element { - if m == zero { - return zero - } - return add(times(prev(m), n), n) -} - -// pot defines power function -func pot(m, n *list.Element) *list.Element { - if n == zero { - return one - } - return times(pot(m, prev(n)), m) -} - -// sub defines substraction -func sub(m, n *list.Element) *list.Element { - if n == zero { - return m - } - return prev(sub(m, prev(n))) -} - -type function func(*list.Element, *list.Element) *list.Element - -// test perfoms tests -func test(op string, f function) { - var mm, nn int - switch op { - case "+": - mm = rand.Intn(100) - nn = rand.Intn(100) - case "-": - mm = rand.Intn(100) - nn = rand.Intn(100) - if nn > mm { - mm, nn = nn, mm - } - case "*": - mm = rand.Intn(10) - nn = rand.Intn(10) - case "^": - mm = rand.Intn(10) - nn = rand.Intn(3) - } - m := scan(mm) - n := scan(nn) - r := f(m, n) - fmt.Println(m.Value, op, n.Value, "=", r.Value) -} - -// scan lookups element representation -func scan(n int) *list.Element { - if n > alphabet.Len() { - log.Fatal("out of range") - return nil - } - e := alphabet.Front() - for i := 0; i < n; i++ { - e = e.Next() - } - return e -} - -func init() { - alphabet = list.New() - for i := 0; i <= 1000; i++ { - alphabet.PushBack(fmt.Sprint(i)) - } - zero = alphabet.Front() - one = zero.Next() - rand.Seed(time.Now().Unix()) -} - func main() { for i := 0; i < 3; i++ { - test("+", add) - test("-", sub) - test("*", times) - test("^", pot) + verify("+", add) + verify("-", sub) + verify("*", times) + verify("^", pot) } } -- cgit v1.2.3