// ApproxEqual performs an element-wise approximate equality test between two matrices,
// as if FloatEqual had been used.
760023
func (m1 Mat4x2) ApproxEqual(m2 Mat4x2) bool {
	for i := range m1 {
		if !FloatEqual(m1[i], m2[i]) {
			return false
		}
	}
	return true
}
1087301
func (s Spline) Equals(other core.DxfElement) bool {
	if otherSpline, ok := other.(*Spline); ok {
		return s.BaseEntity.Equals(otherSpline.BaseEntity) &&
			s.NormalVector.Equals(otherSpline.NormalVector) &&
			s.Closed == otherSpline.Closed &&
			s.Periodic == otherSpline.Periodic &&
			s.Rational == otherSpline.Rational &&
			s.Planar == otherSpline.Planar &&
			s.Linear == otherSpline.Linear &&
			s.Degree == otherSpline.Degree &&
			core.FloatEquals(s.KnotTolerance, otherSpline.KnotTolerance) &&
			core.FloatEquals(s.ControlPointTolerance,
				otherSpline.ControlPointTolerance) &&
			core.FloatEquals(s.FitTolerance, otherSpline.FitTolerance) &&
			s.StartTangent.Equals(otherSpline.StartTangent) &&
			s.EndTangent.Equals(otherSpline.EndTangent) &&
			core.FloatSliceEquals(s.KnotValues, otherSpline.KnotValues) &&
			core.FloatSliceEquals(s.Weights, otherSpline.Weights) &&
			s.ControlPoints.Equals(otherSpline.ControlPoints) &&
			s.FitPoints.Equals(otherSpline.FitPoints)
	}
	return false
}
417801
func (v1 Vec3) ApproxFuncEqual(v2 Vec3, eq func(float32, float32) bool) bool {
	for i := range v1 {
		if !eq(v1[i], v2[i]) {
			return false
		}
	}
	return true
}
614623
func (f Float) Equals(other DxfElement) bool {
	if fValue, ok := other.(*Float); ok {
		return f.value == fValue.value
	}
	return false
}
624931
func LimitEqual(o1, o2 *LimitOption) bool {
	if o1 != nil {
		return o1.Equal(o2)
	}
	if o2 != nil {
		return o2.Equal(o1)
	}
	return true
}
495782
func (v Vector) GreaterEqual(b Vector) bool {
	comp := v.Compare(b)
	return comp == Greater || comp == Equal
}
1210911
func Float64Equal(a, b float64) bool {
	return math.Abs(a-b) <= closeFactor || math.Abs(1-a/b) <= closeFactor
}
102716
func (q1 Quat) ApproxEqualThreshold(q2 Quat, epsilon float32) bool {
	return FloatEqualThreshold(q1.W, q2.W, epsilon) && q1.V.ApproxEqualThreshold(q2.V, epsilon)
}
381888
func PercentileComputationEqual(o1, o2 *PercentileComputationOption) bool {
	if o1 != nil {
		return o1.Equal(o2)
	}
	if o2 != nil {
		return o2.Equal(o1)
	}
	return true
}
126251
func TimeEqual(a, b time.Time) bool {
	if runtime.GOOS == "darwin" {
		a = a.Truncate(1 * time.Second)
		b = b.Truncate(1 * time.Second)
	}
	return a.Equal(b)
}
730711
func (p *Point) Equal(p2 Point) bool {
	return FloatEqual(p.X, p2.X) && FloatEqual(p.Y, p2.Y)
}
1036101
func (a *AggFuncDesc) Equal(ctx sessionctx.Context, other *AggFuncDesc) bool {
	if a.HasDistinct != other.HasDistinct {
		return false
	}
	return a.baseFuncDesc.equal(ctx, &other.baseFuncDesc)
}
83184
func (d *MyDecimal) Compare(to *MyDecimal) int {
	if d.negative == to.negative {
		cmp, err := doSub(d, to, nil)
		terror.Log(errors.Trace(err))
		return cmp
	}
	if d.negative {
		return -1
	}
	return 1
}
1122444
func AnalyticsEqual(o1, o2 *AnalyticsOption) bool {
	if o1 != nil {
		return o1.Equal(o2)
	}
	if o2 != nil {
		return o2.Equal(o1)
	}
	return true
}
615264
func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {
	return NotEqual(a.t, expected, actual, msgAndArgs...)
}
1040911
func AroundPrecisionEqual(o1, o2 *AroundPrecisionOption) bool {
	if o1 != nil {
		return o1.Equal(o2)
	}
	if o2 != nil {
		return o2.Equal(o1)
	}
	return true
}
868915
func NewEqual(Variable node.Node, Expression node.Node) *Equal {
	return &Equal{
		FreeFloating: nil,
		Left:         Variable,
		Right:        Expression,
	}
}