Try out generics for assert
diff --git a/assert/assert.go b/assert/assert.go
index dbd4f5a..c0d1858 100644
--- a/assert/assert.go
+++ b/assert/assert.go
@@ -94,7 +94,6 @@
 package assert // import "gotest.tools/v3/assert"
 
 import (
-	gocmp "github.com/google/go-cmp/cmp"
 	"gotest.tools/v3/assert/cmp"
 	"gotest.tools/v3/internal/assert"
 )
@@ -180,53 +179,6 @@
 	}
 }
 
-// Equal uses the == operator to assert two values are equal and fails the test
-// if they are not equal.
-//
-// If the comparison fails Equal will use the variable names and types of
-// x and y as part of the failure message to identify the actual and expected
-// values.
-//
-//   assert.Equal(t, actual, expected)
-//   // main_test.go:41: assertion failed: 1 (actual int) != 21 (expected int32)
-//
-// If either x or y are a multi-line string the failure message will include a
-// unified diff of the two values. If the values only differ by whitespace
-// the unified diff will be augmented by replacing whitespace characters with
-// visible characters to identify the whitespace difference.
-//
-// Equal uses t.FailNow to fail the test. Like t.FailNow, Equal must be
-// called from the goroutine running the test function, not from other
-// goroutines created during the test. Use Check with cmp.Equal from other
-// goroutines.
-func Equal(t TestingT, x, y interface{}, msgAndArgs ...interface{}) {
-	if ht, ok := t.(helperT); ok {
-		ht.Helper()
-	}
-	if !assert.Eval(t, assert.ArgsAfterT, cmp.Equal(x, y), msgAndArgs...) {
-		t.FailNow()
-	}
-}
-
-// DeepEqual uses google/go-cmp (https://godoc.org/github.com/google/go-cmp/cmp)
-// to assert two values are equal and fails the test if they are not equal.
-//
-// Package http://pkg.go.dev/gotest.tools/v3/assert/opt provides some additional
-// commonly used Options.
-//
-// DeepEqual uses t.FailNow to fail the test. Like t.FailNow, DeepEqual must be
-// called from the goroutine running the test function, not from other
-// goroutines created during the test. Use Check with cmp.DeepEqual from other
-// goroutines.
-func DeepEqual(t TestingT, x, y interface{}, opts ...gocmp.Option) {
-	if ht, ok := t.(helperT); ok {
-		ht.Helper()
-	}
-	if !assert.Eval(t, assert.ArgsAfterT, cmp.DeepEqual(x, y, opts...)) {
-		t.FailNow()
-	}
-}
-
 // Error fails the test if err is nil, or if err.Error is not equal to expected.
 // Both err.Error and expected will be included in the failure message.
 // Error performs an exact match of the error text. Use ErrorContains if only
diff --git a/assert/assert_117.go b/assert/assert_117.go
new file mode 100644
index 0000000..1e929c6
--- /dev/null
+++ b/assert/assert_117.go
@@ -0,0 +1,28 @@
+//go:build !go1.18
+// +build !go1.18
+
+package assert
+
+import (
+	gocmp "github.com/google/go-cmp/cmp"
+	"gotest.tools/v3/assert/cmp"
+	"gotest.tools/v3/internal/assert"
+)
+
+func Equal(t TestingT, x, y interface{}, msgAndArgs ...interface{}) {
+	if ht, ok := t.(helperT); ok {
+		ht.Helper()
+	}
+	if !assert.Eval(t, assert.ArgsAfterT, cmp.Equal(x, y), msgAndArgs...) {
+		t.FailNow()
+	}
+}
+
+func DeepEqual(t TestingT, x, y interface{}, opts ...gocmp.Option) {
+	if ht, ok := t.(helperT); ok {
+		ht.Helper()
+	}
+	if !assert.Eval(t, assert.ArgsAfterT, cmp.DeepEqual(x, y, opts...)) {
+		t.FailNow()
+	}
+}
diff --git a/assert/assert_118.go b/assert/assert_118.go
new file mode 100644
index 0000000..629f6d9
--- /dev/null
+++ b/assert/assert_118.go
@@ -0,0 +1,57 @@
+//go:build go1.18
+// +build go1.18
+
+package assert
+
+import (
+	gocmp "github.com/google/go-cmp/cmp"
+	"gotest.tools/v3/assert/cmp"
+	"gotest.tools/v3/internal/assert"
+)
+
+// Equal uses the == operator to assert two values are equal and fails the test
+// if they are not equal.
+//
+// If the comparison fails Equal will use the variable names and types of
+// x and y as part of the failure message to identify the actual and expected
+// values.
+//
+//   assert.Equal(t, actual, expected)
+//   // main_test.go:41: assertion failed: 1 (actual int) != 21 (expected int32)
+//
+// If either x or y are a multi-line string the failure message will include a
+// unified diff of the two values. If the values only differ by whitespace
+// the unified diff will be augmented by replacing whitespace characters with
+// visible characters to identify the whitespace difference.
+//
+// Equal uses t.FailNow to fail the test. Like t.FailNow, Equal must be
+// called from the goroutine running the test function, not from other
+// goroutines created during the test. Use Check with cmp.Equal from other
+// goroutines.
+func Equal[T comparable](t TestingT, x, y T, msgAndArgs ...interface{}) {
+	if ht, ok := t.(helperT); ok {
+		ht.Helper()
+	}
+	if !assert.Eval(t, assert.ArgsAfterT, cmp.Equal(x, y), msgAndArgs...) {
+		t.FailNow()
+	}
+}
+
+// DeepEqual uses google/go-cmp (https://godoc.org/github.com/google/go-cmp/cmp)
+// to assert two values are equal and fails the test if they are not equal.
+//
+// Package http://pkg.go.dev/gotest.tools/v3/assert/opt provides some additional
+// commonly used Options.
+//
+// DeepEqual uses t.FailNow to fail the test. Like t.FailNow, DeepEqual must be
+// called from the goroutine running the test function, not from other
+// goroutines created during the test. Use Check with cmp.DeepEqual from other
+// goroutines.
+func DeepEqual[T any](t TestingT, x, y T, opts ...gocmp.Option) {
+	if ht, ok := t.(helperT); ok {
+		ht.Helper()
+	}
+	if !assert.Eval(t, assert.ArgsAfterT, cmp.DeepEqual(x, y, opts...)) {
+		t.FailNow()
+	}
+}
diff --git a/assert/assert_test.go b/assert/assert_test.go
index e8cd901..7cd7762 100644
--- a/assert/assert_test.go
+++ b/assert/assert_test.go
@@ -3,10 +3,12 @@
 import (
 	"fmt"
 	"os"
+	"runtime"
 	"testing"
 
 	gocmp "github.com/google/go-cmp/cmp"
 	"gotest.tools/v3/assert/cmp"
+	"gotest.tools/v3/skip"
 )
 
 type fakeTestingT struct {
@@ -270,6 +272,7 @@
 }
 
 func TestEqualFailureTypes(t *testing.T) {
+	skip.If(t, runtime.Version() >= "go1.18")
 	fakeT := &fakeTestingT{}
 
 	Equal(fakeT, 3, uint(3))
diff --git a/go.mod b/go.mod
index abeca34..028e38b 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module gotest.tools/v3
 
-go 1.13
+go 1.18
 
 require (
 	github.com/google/go-cmp v0.5.5