Add standard library atomic operations to benchmark (#35)

Currently, we only benchmark our custom atomic types, but don't
benchmark the standard library types. Add benchmarks for ints and uints
that the standard library supports.
diff --git a/stress_test.go b/stress_test.go
index 2efecb2..f35de2d 100644
--- a/stress_test.go
+++ b/stress_test.go
@@ -21,8 +21,10 @@
 package atomic
 
 import (
+	"math"
 	"runtime"
 	"sync"
+	"sync/atomic"
 	"testing"
 )
 
@@ -32,13 +34,17 @@
 )
 
 var _stressTests = map[string]func() func(){
-	"i32":    stressInt32,
-	"i64":    stressInt64,
-	"u32":    stressUint32,
-	"u64":    stressUint64,
-	"f64":    stressFloat64,
-	"bool":   stressBool,
-	"string": stressString,
+	"i32/std": stressStdInt32,
+	"i32":     stressInt32,
+	"i64/std": stressStdInt32,
+	"i64":     stressInt64,
+	"u32/std": stressStdUint32,
+	"u32":     stressUint32,
+	"u64/std": stressStdUint64,
+	"u64":     stressUint64,
+	"f64":     stressFloat64,
+	"bool":    stressBool,
+	"string":  stressString,
 }
 
 func TestStress(t *testing.T) {
@@ -87,6 +93,20 @@
 	}
 }
 
+func stressStdInt32() func() {
+	var atom int32
+	return func() {
+		atomic.LoadInt32(&atom)
+		atomic.AddInt32(&atom, 1)
+		atomic.AddInt32(&atom, -2)
+		atomic.AddInt32(&atom, 1)
+		atomic.AddInt32(&atom, -1)
+		atomic.CompareAndSwapInt32(&atom, 1, 0)
+		atomic.SwapInt32(&atom, 5)
+		atomic.StoreInt32(&atom, 1)
+	}
+}
+
 func stressInt32() func() {
 	var atom Int32
 	return func() {
@@ -101,6 +121,20 @@
 	}
 }
 
+func stressStdInt64() func() {
+	var atom int64
+	return func() {
+		atomic.LoadInt64(&atom)
+		atomic.AddInt64(&atom, 1)
+		atomic.AddInt64(&atom, -2)
+		atomic.AddInt64(&atom, 1)
+		atomic.AddInt64(&atom, -1)
+		atomic.CompareAndSwapInt64(&atom, 1, 0)
+		atomic.SwapInt64(&atom, 5)
+		atomic.StoreInt64(&atom, 1)
+	}
+}
+
 func stressInt64() func() {
 	var atom Int64
 	return func() {
@@ -115,6 +149,21 @@
 	}
 }
 
+func stressStdUint32() func() {
+	var atom uint32
+	return func() {
+		atomic.LoadUint32(&atom)
+		atomic.AddUint32(&atom, 1)
+		// Adding `MaxUint32` is the same as subtracting 1
+		atomic.AddUint32(&atom, math.MaxUint32-1)
+		atomic.AddUint32(&atom, 1)
+		atomic.AddUint32(&atom, math.MaxUint32)
+		atomic.CompareAndSwapUint32(&atom, 1, 0)
+		atomic.SwapUint32(&atom, 5)
+		atomic.StoreUint32(&atom, 1)
+	}
+}
+
 func stressUint32() func() {
 	var atom Uint32
 	return func() {
@@ -129,6 +178,21 @@
 	}
 }
 
+func stressStdUint64() func() {
+	var atom uint64
+	return func() {
+		atomic.LoadUint64(&atom)
+		atomic.AddUint64(&atom, 1)
+		// Adding `MaxUint64` is the same as subtracting 1
+		atomic.AddUint64(&atom, math.MaxUint64-1)
+		atomic.AddUint64(&atom, 1)
+		atomic.AddUint64(&atom, math.MaxUint64)
+		atomic.CompareAndSwapUint64(&atom, 1, 0)
+		atomic.SwapUint64(&atom, 5)
+		atomic.StoreUint64(&atom, 1)
+	}
+}
+
 func stressUint64() func() {
 	var atom Uint64
 	return func() {