Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 5 | package concurrency |
| 6 | |
| 7 | import ( |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 8 | "testing" |
Jiri Simsa | 870ddd6 | 2014-06-27 14:56:58 -0700 | [diff] [blame] | 9 | |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 10 | "v.io/x/ref/test/testutil" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 11 | ) |
| 12 | |
Suharsh Sivakumar | d19c95d | 2015-02-19 14:44:50 -0800 | [diff] [blame] | 13 | //go:generate v23 test generate |
Asim Shankar | c920db3 | 2014-10-16 19:18:21 -0700 | [diff] [blame] | 14 | |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 15 | // TestClone checks the clone() method of a clock. |
| 16 | func TestClone(t *testing.T) { |
Jiri Simsa | 95ab297 | 2015-07-01 12:35:57 -0700 | [diff] [blame] | 17 | testutil.InitRandGenerator(t.Logf) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 18 | c1 := newClock() |
Cosmos Nicolaou | c818b80 | 2015-06-05 15:52:45 -0700 | [diff] [blame] | 19 | c1[0] = testutil.RandomIntn(100) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 20 | c2 := c1.clone() |
| 21 | c1[0]++ |
| 22 | if c2[0] != c1[0]-1 { |
| 23 | t.Errorf("Unexpected clock value: expected %v, got %v", c1[0]-1, c2[0]) |
| 24 | } |
| 25 | } |
| 26 | |
| 27 | // TestEquality checks the equals() method of a clock. |
| 28 | func TestEquality(t *testing.T) { |
| 29 | c1, c2 := newClock(), newClock() |
| 30 | for i := TID(0); i < TID(10); i++ { |
Cosmos Nicolaou | c818b80 | 2015-06-05 15:52:45 -0700 | [diff] [blame] | 31 | c1[i] = testutil.RandomIntn(100) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 32 | c2[i] = c1[i] |
| 33 | } |
| 34 | if !c1.equals(c2) { |
| 35 | t.Errorf("Unexpected inequality between %v and %v", c1, c2) |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | // TestHappensBefore checks the happensBefore() method of a clock. |
| 40 | func TestHappensBefore(t *testing.T) { |
| 41 | c1, c2, c3 := newClock(), newClock(), newClock() |
| 42 | for i := TID(0); i < TID(10); i++ { |
Cosmos Nicolaou | c818b80 | 2015-06-05 15:52:45 -0700 | [diff] [blame] | 43 | c1[i] = testutil.RandomIntn(100) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 44 | if i%2 == 0 { |
| 45 | c2[i] = c1[i] + 1 |
| 46 | c3[i] = c1[i] + 1 |
| 47 | } else { |
| 48 | c2[i] = c1[i] |
| 49 | c3[i] = c2[i] - 1 |
| 50 | } |
| 51 | } |
| 52 | if !c1.happensBefore(c1) { |
| 53 | t.Errorf("Unexpected outcome of %v.happensBefore(%v): expected %v, got %v", c1, c1, true, false) |
| 54 | } |
| 55 | if !c1.happensBefore(c2) { |
| 56 | t.Errorf("Unexpected outcome of %v.happensBefore(%v): expected %v, got %v", c1, c2, true, false) |
| 57 | } |
| 58 | if c2.happensBefore(c1) { |
| 59 | t.Errorf("Unexpected outcome of %v.happensBefore(%v): expected %v, got %v", c2, c1, false, true) |
| 60 | } |
| 61 | if c1.happensBefore(c3) { |
| 62 | t.Errorf("Unexpected outcome of %v.happensBefore(%v): expected %v, got %v", c1, c3, false, true) |
| 63 | } |
| 64 | if c3.happensBefore(c1) { |
| 65 | t.Errorf("Unexpected outcome of %v.happensBefore(%v): expected %v, got %v", c3, c1, false, true) |
| 66 | } |
| 67 | } |
| 68 | |
| 69 | // TestMerge checks the merge() method of a clock. |
| 70 | func TestMerge(t *testing.T) { |
| 71 | c1, c2 := newClock(), newClock() |
| 72 | for i := TID(0); i < TID(10); i++ { |
Cosmos Nicolaou | c818b80 | 2015-06-05 15:52:45 -0700 | [diff] [blame] | 73 | c1[i] = testutil.RandomIntn(100) |
| 74 | c2[i] = testutil.RandomIntn(100) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 75 | } |
| 76 | c1.merge(c2) |
| 77 | for i := TID(0); i < TID(10); i++ { |
| 78 | if c1[i] < c2[i] { |
| 79 | t.Errorf("Unexpected order between %v and %v: expected '>=', got '<'", c1[i], c2[i]) |
| 80 | } |
| 81 | } |
| 82 | } |