package stm import ( "flag" ) var nFlag = flag.Int( "n", 1_000, "The number of iterations to execute", ) func MainTest() { flag.Parse() n := *nFlag for i := 0; i < n; i++ { // swap 1000 goroutines that each increment v by 1 v := NewVar(0) for i := 0; i < 1000; i++ { go Atomically(VoidOperation(func(tx *Tx) { v.Set(tx, v.Get(tx) + 1) })) } // wait for v to reach 1000 Atomically(VoidOperation(func(tx *Tx) { tx.Assert(v.Get(tx) == 1000) })) } }