github.com/wzzhu/tensor@v0.9.24/dense_cmp_test.go (about)

     1  // Code generated by genlib2. DO NOT EDIT.
     2  
     3  package tensor
     4  
     5  import (
     6  	"reflect"
     7  	"testing"
     8  	"testing/quick"
     9  )
    10  
    11  func TestDense_Gt(t *testing.T) {
    12  	transFn := func(q *Dense) bool {
    13  		we, _ := willerr(q, ordTypes, nil)
    14  		_, ok := q.Engine().(Gter)
    15  		we = we || !ok
    16  
    17  		r := newRand()
    18  		a := q.Clone().(*Dense)
    19  		b := q.Clone().(*Dense)
    20  		c := q.Clone().(*Dense)
    21  
    22  		bv, _ := quick.Value(b.Dtype().Type, r)
    23  		cv, _ := quick.Value(c.Dtype().Type, r)
    24  		b.Memset(bv.Interface())
    25  		c.Memset(cv.Interface())
    26  
    27  		axb, err := a.Gt(b)
    28  		if err, retEarly := qcErrCheck(t, "Gt - a∙b", a, b, we, err); retEarly {
    29  			if err != nil {
    30  				return false
    31  			}
    32  			return true
    33  		}
    34  
    35  		bxc, err := b.Gt(c)
    36  		if err, retEarly := qcErrCheck(t, "Gt - b∙c", b, c, we, err); retEarly {
    37  			if err != nil {
    38  				return false
    39  			}
    40  			return true
    41  		}
    42  
    43  		axc, err := a.Gt(c)
    44  		if err, retEarly := qcErrCheck(t, "Gt - a∙c", a, c, we, err); retEarly {
    45  			if err != nil {
    46  				return false
    47  			}
    48  			return true
    49  		}
    50  
    51  		ab := axb.Bools()
    52  		bc := bxc.Bools()
    53  		ac := axc.Bools()
    54  		for i, vab := range ab {
    55  			if vab && bc[i] {
    56  				if !ac[i] {
    57  					return false
    58  				}
    59  			}
    60  		}
    61  
    62  		return true
    63  	}
    64  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
    65  		t.Errorf("Transitivity test for Gt failed: %v", err)
    66  	}
    67  
    68  }
    69  func TestDense_Gte(t *testing.T) {
    70  	transFn := func(q *Dense) bool {
    71  		we, _ := willerr(q, ordTypes, nil)
    72  		_, ok := q.Engine().(Gteer)
    73  		we = we || !ok
    74  
    75  		r := newRand()
    76  		a := q.Clone().(*Dense)
    77  		b := q.Clone().(*Dense)
    78  		c := q.Clone().(*Dense)
    79  
    80  		bv, _ := quick.Value(b.Dtype().Type, r)
    81  		cv, _ := quick.Value(c.Dtype().Type, r)
    82  		b.Memset(bv.Interface())
    83  		c.Memset(cv.Interface())
    84  
    85  		axb, err := a.Gte(b)
    86  		if err, retEarly := qcErrCheck(t, "Gte - a∙b", a, b, we, err); retEarly {
    87  			if err != nil {
    88  				return false
    89  			}
    90  			return true
    91  		}
    92  
    93  		bxc, err := b.Gte(c)
    94  		if err, retEarly := qcErrCheck(t, "Gte - b∙c", b, c, we, err); retEarly {
    95  			if err != nil {
    96  				return false
    97  			}
    98  			return true
    99  		}
   100  
   101  		axc, err := a.Gte(c)
   102  		if err, retEarly := qcErrCheck(t, "Gte - a∙c", a, c, we, err); retEarly {
   103  			if err != nil {
   104  				return false
   105  			}
   106  			return true
   107  		}
   108  
   109  		ab := axb.Bools()
   110  		bc := bxc.Bools()
   111  		ac := axc.Bools()
   112  		for i, vab := range ab {
   113  			if vab && bc[i] {
   114  				if !ac[i] {
   115  					return false
   116  				}
   117  			}
   118  		}
   119  
   120  		return true
   121  	}
   122  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   123  		t.Errorf("Transitivity test for Gte failed: %v", err)
   124  	}
   125  
   126  }
   127  func TestDense_Lt(t *testing.T) {
   128  	transFn := func(q *Dense) bool {
   129  		we, _ := willerr(q, ordTypes, nil)
   130  		_, ok := q.Engine().(Lter)
   131  		we = we || !ok
   132  
   133  		r := newRand()
   134  		a := q.Clone().(*Dense)
   135  		b := q.Clone().(*Dense)
   136  		c := q.Clone().(*Dense)
   137  
   138  		bv, _ := quick.Value(b.Dtype().Type, r)
   139  		cv, _ := quick.Value(c.Dtype().Type, r)
   140  		b.Memset(bv.Interface())
   141  		c.Memset(cv.Interface())
   142  
   143  		axb, err := a.Lt(b)
   144  		if err, retEarly := qcErrCheck(t, "Lt - a∙b", a, b, we, err); retEarly {
   145  			if err != nil {
   146  				return false
   147  			}
   148  			return true
   149  		}
   150  
   151  		bxc, err := b.Lt(c)
   152  		if err, retEarly := qcErrCheck(t, "Lt - b∙c", b, c, we, err); retEarly {
   153  			if err != nil {
   154  				return false
   155  			}
   156  			return true
   157  		}
   158  
   159  		axc, err := a.Lt(c)
   160  		if err, retEarly := qcErrCheck(t, "Lt - a∙c", a, c, we, err); retEarly {
   161  			if err != nil {
   162  				return false
   163  			}
   164  			return true
   165  		}
   166  
   167  		ab := axb.Bools()
   168  		bc := bxc.Bools()
   169  		ac := axc.Bools()
   170  		for i, vab := range ab {
   171  			if vab && bc[i] {
   172  				if !ac[i] {
   173  					return false
   174  				}
   175  			}
   176  		}
   177  
   178  		return true
   179  	}
   180  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   181  		t.Errorf("Transitivity test for Lt failed: %v", err)
   182  	}
   183  
   184  }
   185  func TestDense_Lte(t *testing.T) {
   186  	transFn := func(q *Dense) bool {
   187  		we, _ := willerr(q, ordTypes, nil)
   188  		_, ok := q.Engine().(Lteer)
   189  		we = we || !ok
   190  
   191  		r := newRand()
   192  		a := q.Clone().(*Dense)
   193  		b := q.Clone().(*Dense)
   194  		c := q.Clone().(*Dense)
   195  
   196  		bv, _ := quick.Value(b.Dtype().Type, r)
   197  		cv, _ := quick.Value(c.Dtype().Type, r)
   198  		b.Memset(bv.Interface())
   199  		c.Memset(cv.Interface())
   200  
   201  		axb, err := a.Lte(b)
   202  		if err, retEarly := qcErrCheck(t, "Lte - a∙b", a, b, we, err); retEarly {
   203  			if err != nil {
   204  				return false
   205  			}
   206  			return true
   207  		}
   208  
   209  		bxc, err := b.Lte(c)
   210  		if err, retEarly := qcErrCheck(t, "Lte - b∙c", b, c, we, err); retEarly {
   211  			if err != nil {
   212  				return false
   213  			}
   214  			return true
   215  		}
   216  
   217  		axc, err := a.Lte(c)
   218  		if err, retEarly := qcErrCheck(t, "Lte - a∙c", a, c, we, err); retEarly {
   219  			if err != nil {
   220  				return false
   221  			}
   222  			return true
   223  		}
   224  
   225  		ab := axb.Bools()
   226  		bc := bxc.Bools()
   227  		ac := axc.Bools()
   228  		for i, vab := range ab {
   229  			if vab && bc[i] {
   230  				if !ac[i] {
   231  					return false
   232  				}
   233  			}
   234  		}
   235  
   236  		return true
   237  	}
   238  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   239  		t.Errorf("Transitivity test for Lte failed: %v", err)
   240  	}
   241  
   242  }
   243  func TestDense_ElEq(t *testing.T) {
   244  	transFn := func(q *Dense) bool {
   245  		we, _ := willerr(q, eqTypes, nil)
   246  		_, ok := q.Engine().(ElEqer)
   247  		we = we || !ok
   248  
   249  		r := newRand()
   250  		a := q.Clone().(*Dense)
   251  		b := q.Clone().(*Dense)
   252  		c := q.Clone().(*Dense)
   253  
   254  		bv, _ := quick.Value(b.Dtype().Type, r)
   255  		cv, _ := quick.Value(c.Dtype().Type, r)
   256  		b.Memset(bv.Interface())
   257  		c.Memset(cv.Interface())
   258  
   259  		axb, err := a.ElEq(b)
   260  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
   261  			if err != nil {
   262  				return false
   263  			}
   264  			return true
   265  		}
   266  
   267  		bxc, err := b.ElEq(c)
   268  		if err, retEarly := qcErrCheck(t, "ElEq - b∙c", b, c, we, err); retEarly {
   269  			if err != nil {
   270  				return false
   271  			}
   272  			return true
   273  		}
   274  
   275  		axc, err := a.ElEq(c)
   276  		if err, retEarly := qcErrCheck(t, "ElEq - a∙c", a, c, we, err); retEarly {
   277  			if err != nil {
   278  				return false
   279  			}
   280  			return true
   281  		}
   282  
   283  		ab := axb.Bools()
   284  		bc := bxc.Bools()
   285  		ac := axc.Bools()
   286  		for i, vab := range ab {
   287  			if vab && bc[i] {
   288  				if !ac[i] {
   289  					return false
   290  				}
   291  			}
   292  		}
   293  
   294  		return true
   295  	}
   296  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   297  		t.Errorf("Transitivity test for ElEq failed: %v", err)
   298  	}
   299  
   300  	symFn := func(q *Dense) bool {
   301  		we, _ := willerr(q, eqTypes, nil)
   302  		_, ok := q.Engine().(ElEqer)
   303  		we = we || !ok
   304  
   305  		r := newRand()
   306  		a := q.Clone().(*Dense)
   307  		b := q.Clone().(*Dense)
   308  
   309  		bv, _ := quick.Value(b.Dtype().Type, r)
   310  		b.Memset(bv.Interface())
   311  
   312  		axb, err := a.ElEq(b)
   313  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
   314  			if err != nil {
   315  				return false
   316  			}
   317  			return true
   318  		}
   319  
   320  		bxa, err := b.ElEq(a)
   321  		if err, retEarly := qcErrCheck(t, "ElEq - b∙a", a, b, we, err); retEarly {
   322  			if err != nil {
   323  				return false
   324  			}
   325  			return true
   326  		}
   327  		return reflect.DeepEqual(axb.Data(), bxa.Data())
   328  
   329  	}
   330  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   331  		t.Errorf("Transitivity test for ElEq failed: %v", err)
   332  	}
   333  }
   334  func TestDense_ElNe(t *testing.T) {
   335  	symFn := func(q *Dense) bool {
   336  		we, _ := willerr(q, eqTypes, nil)
   337  		_, ok := q.Engine().(ElEqer)
   338  		we = we || !ok
   339  
   340  		r := newRand()
   341  		a := q.Clone().(*Dense)
   342  		b := q.Clone().(*Dense)
   343  
   344  		bv, _ := quick.Value(b.Dtype().Type, r)
   345  		b.Memset(bv.Interface())
   346  
   347  		axb, err := a.ElNe(b)
   348  		if err, retEarly := qcErrCheck(t, "ElNe - a∙b", a, b, we, err); retEarly {
   349  			if err != nil {
   350  				return false
   351  			}
   352  			return true
   353  		}
   354  
   355  		bxa, err := b.ElNe(a)
   356  		if err, retEarly := qcErrCheck(t, "ElNe - b∙a", a, b, we, err); retEarly {
   357  			if err != nil {
   358  				return false
   359  			}
   360  			return true
   361  		}
   362  		return reflect.DeepEqual(axb.Data(), bxa.Data())
   363  
   364  	}
   365  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   366  		t.Errorf("Transitivity test for ElNe failed: %v", err)
   367  	}
   368  }
   369  func TestDense_Gt_assame(t *testing.T) {
   370  	transFn := func(q *Dense) bool {
   371  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   372  		_, ok := q.Engine().(Gter)
   373  		we = we || !ok
   374  
   375  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   376  			return true // we exit early if the generated type is not something we can handle
   377  		}
   378  		r := newRand()
   379  		a := q.Clone().(*Dense)
   380  		b := q.Clone().(*Dense)
   381  		c := q.Clone().(*Dense)
   382  
   383  		bv, _ := quick.Value(b.Dtype().Type, r)
   384  		cv, _ := quick.Value(c.Dtype().Type, r)
   385  		b.Memset(bv.Interface())
   386  		c.Memset(cv.Interface())
   387  
   388  		axb, err := a.Gt(b, AsSameType())
   389  		if err, retEarly := qcErrCheck(t, "Gt - a∙b", a, b, we, err); retEarly {
   390  			if err != nil {
   391  				return false
   392  			}
   393  			return true
   394  		}
   395  
   396  		bxc, err := b.Gt(c, AsSameType())
   397  		if err, retEarly := qcErrCheck(t, "Gt - b∙c", b, c, we, err); retEarly {
   398  			if err != nil {
   399  				return false
   400  			}
   401  			return true
   402  		}
   403  
   404  		axc, err := a.Gt(c, AsSameType())
   405  		if err, retEarly := qcErrCheck(t, "Gt - a∙c", a, c, we, err); retEarly {
   406  			if err != nil {
   407  				return false
   408  			}
   409  			return true
   410  		}
   411  
   412  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
   413  			t.Errorf("a: %-v", a)
   414  			t.Errorf("b: %-v", b)
   415  			t.Errorf("c: %-v", c)
   416  			t.Errorf("axb.Data() %v", axb.Data())
   417  			t.Errorf("bxc.Data() %v", bxc.Data())
   418  			t.Errorf("axc.Data() %v", axc.Data())
   419  			return false
   420  		}
   421  
   422  		return true
   423  	}
   424  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   425  		t.Errorf("Transitivity test for Gt failed: %v", err)
   426  	}
   427  
   428  }
   429  func TestDense_Gte_assame(t *testing.T) {
   430  	transFn := func(q *Dense) bool {
   431  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   432  		_, ok := q.Engine().(Gteer)
   433  		we = we || !ok
   434  
   435  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   436  			return true // we exit early if the generated type is not something we can handle
   437  		}
   438  		r := newRand()
   439  		a := q.Clone().(*Dense)
   440  		b := q.Clone().(*Dense)
   441  		c := q.Clone().(*Dense)
   442  
   443  		bv, _ := quick.Value(b.Dtype().Type, r)
   444  		cv, _ := quick.Value(c.Dtype().Type, r)
   445  		b.Memset(bv.Interface())
   446  		c.Memset(cv.Interface())
   447  
   448  		axb, err := a.Gte(b, AsSameType())
   449  		if err, retEarly := qcErrCheck(t, "Gte - a∙b", a, b, we, err); retEarly {
   450  			if err != nil {
   451  				return false
   452  			}
   453  			return true
   454  		}
   455  
   456  		bxc, err := b.Gte(c, AsSameType())
   457  		if err, retEarly := qcErrCheck(t, "Gte - b∙c", b, c, we, err); retEarly {
   458  			if err != nil {
   459  				return false
   460  			}
   461  			return true
   462  		}
   463  
   464  		axc, err := a.Gte(c, AsSameType())
   465  		if err, retEarly := qcErrCheck(t, "Gte - a∙c", a, c, we, err); retEarly {
   466  			if err != nil {
   467  				return false
   468  			}
   469  			return true
   470  		}
   471  
   472  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
   473  			t.Errorf("a: %-v", a)
   474  			t.Errorf("b: %-v", b)
   475  			t.Errorf("c: %-v", c)
   476  			t.Errorf("axb.Data() %v", axb.Data())
   477  			t.Errorf("bxc.Data() %v", bxc.Data())
   478  			t.Errorf("axc.Data() %v", axc.Data())
   479  			return false
   480  		}
   481  
   482  		return true
   483  	}
   484  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   485  		t.Errorf("Transitivity test for Gte failed: %v", err)
   486  	}
   487  
   488  }
   489  func TestDense_Lt_assame(t *testing.T) {
   490  	transFn := func(q *Dense) bool {
   491  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   492  		_, ok := q.Engine().(Lter)
   493  		we = we || !ok
   494  
   495  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   496  			return true // we exit early if the generated type is not something we can handle
   497  		}
   498  		r := newRand()
   499  		a := q.Clone().(*Dense)
   500  		b := q.Clone().(*Dense)
   501  		c := q.Clone().(*Dense)
   502  
   503  		bv, _ := quick.Value(b.Dtype().Type, r)
   504  		cv, _ := quick.Value(c.Dtype().Type, r)
   505  		b.Memset(bv.Interface())
   506  		c.Memset(cv.Interface())
   507  
   508  		axb, err := a.Lt(b, AsSameType())
   509  		if err, retEarly := qcErrCheck(t, "Lt - a∙b", a, b, we, err); retEarly {
   510  			if err != nil {
   511  				return false
   512  			}
   513  			return true
   514  		}
   515  
   516  		bxc, err := b.Lt(c, AsSameType())
   517  		if err, retEarly := qcErrCheck(t, "Lt - b∙c", b, c, we, err); retEarly {
   518  			if err != nil {
   519  				return false
   520  			}
   521  			return true
   522  		}
   523  
   524  		axc, err := a.Lt(c, AsSameType())
   525  		if err, retEarly := qcErrCheck(t, "Lt - a∙c", a, c, we, err); retEarly {
   526  			if err != nil {
   527  				return false
   528  			}
   529  			return true
   530  		}
   531  
   532  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
   533  			t.Errorf("a: %-v", a)
   534  			t.Errorf("b: %-v", b)
   535  			t.Errorf("c: %-v", c)
   536  			t.Errorf("axb.Data() %v", axb.Data())
   537  			t.Errorf("bxc.Data() %v", bxc.Data())
   538  			t.Errorf("axc.Data() %v", axc.Data())
   539  			return false
   540  		}
   541  
   542  		return true
   543  	}
   544  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   545  		t.Errorf("Transitivity test for Lt failed: %v", err)
   546  	}
   547  
   548  }
   549  func TestDense_Lte_assame(t *testing.T) {
   550  	transFn := func(q *Dense) bool {
   551  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   552  		_, ok := q.Engine().(Lteer)
   553  		we = we || !ok
   554  
   555  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   556  			return true // we exit early if the generated type is not something we can handle
   557  		}
   558  		r := newRand()
   559  		a := q.Clone().(*Dense)
   560  		b := q.Clone().(*Dense)
   561  		c := q.Clone().(*Dense)
   562  
   563  		bv, _ := quick.Value(b.Dtype().Type, r)
   564  		cv, _ := quick.Value(c.Dtype().Type, r)
   565  		b.Memset(bv.Interface())
   566  		c.Memset(cv.Interface())
   567  
   568  		axb, err := a.Lte(b, AsSameType())
   569  		if err, retEarly := qcErrCheck(t, "Lte - a∙b", a, b, we, err); retEarly {
   570  			if err != nil {
   571  				return false
   572  			}
   573  			return true
   574  		}
   575  
   576  		bxc, err := b.Lte(c, AsSameType())
   577  		if err, retEarly := qcErrCheck(t, "Lte - b∙c", b, c, we, err); retEarly {
   578  			if err != nil {
   579  				return false
   580  			}
   581  			return true
   582  		}
   583  
   584  		axc, err := a.Lte(c, AsSameType())
   585  		if err, retEarly := qcErrCheck(t, "Lte - a∙c", a, c, we, err); retEarly {
   586  			if err != nil {
   587  				return false
   588  			}
   589  			return true
   590  		}
   591  
   592  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
   593  			t.Errorf("a: %-v", a)
   594  			t.Errorf("b: %-v", b)
   595  			t.Errorf("c: %-v", c)
   596  			t.Errorf("axb.Data() %v", axb.Data())
   597  			t.Errorf("bxc.Data() %v", bxc.Data())
   598  			t.Errorf("axc.Data() %v", axc.Data())
   599  			return false
   600  		}
   601  
   602  		return true
   603  	}
   604  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   605  		t.Errorf("Transitivity test for Lte failed: %v", err)
   606  	}
   607  
   608  }
   609  func TestDense_ElEq_assame(t *testing.T) {
   610  	transFn := func(q *Dense) bool {
   611  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   612  		_, ok := q.Engine().(ElEqer)
   613  		we = we || !ok
   614  
   615  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   616  			return true // we exit early if the generated type is not something we can handle
   617  		}
   618  		r := newRand()
   619  		a := q.Clone().(*Dense)
   620  		b := q.Clone().(*Dense)
   621  		c := q.Clone().(*Dense)
   622  
   623  		bv, _ := quick.Value(b.Dtype().Type, r)
   624  		cv, _ := quick.Value(c.Dtype().Type, r)
   625  		b.Memset(bv.Interface())
   626  		c.Memset(cv.Interface())
   627  
   628  		axb, err := a.ElEq(b, AsSameType())
   629  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
   630  			if err != nil {
   631  				return false
   632  			}
   633  			return true
   634  		}
   635  
   636  		bxc, err := b.ElEq(c, AsSameType())
   637  		if err, retEarly := qcErrCheck(t, "ElEq - b∙c", b, c, we, err); retEarly {
   638  			if err != nil {
   639  				return false
   640  			}
   641  			return true
   642  		}
   643  
   644  		axc, err := a.ElEq(c, AsSameType())
   645  		if err, retEarly := qcErrCheck(t, "ElEq - a∙c", a, c, we, err); retEarly {
   646  			if err != nil {
   647  				return false
   648  			}
   649  			return true
   650  		}
   651  
   652  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
   653  			t.Errorf("a: %-v", a)
   654  			t.Errorf("b: %-v", b)
   655  			t.Errorf("c: %-v", c)
   656  			t.Errorf("axb.Data() %v", axb.Data())
   657  			t.Errorf("bxc.Data() %v", bxc.Data())
   658  			t.Errorf("axc.Data() %v", axc.Data())
   659  			return false
   660  		}
   661  
   662  		return true
   663  	}
   664  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   665  		t.Errorf("Transitivity test for ElEq failed: %v", err)
   666  	}
   667  
   668  	symFn := func(q *Dense) bool {
   669  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   670  		_, ok := q.Engine().(ElEqer)
   671  		we = we || !ok
   672  
   673  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   674  			return true // we exit early if the generated type is not something we can handle
   675  		}
   676  		r := newRand()
   677  		a := q.Clone().(*Dense)
   678  		b := q.Clone().(*Dense)
   679  
   680  		bv, _ := quick.Value(b.Dtype().Type, r)
   681  		b.Memset(bv.Interface())
   682  
   683  		axb, err := a.ElEq(b, AsSameType())
   684  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
   685  			if err != nil {
   686  				return false
   687  			}
   688  			return true
   689  		}
   690  
   691  		bxa, err := b.ElEq(a, AsSameType())
   692  		if err, retEarly := qcErrCheck(t, "ElEq - b∙a", a, b, we, err); retEarly {
   693  			if err != nil {
   694  				return false
   695  			}
   696  			return true
   697  		}
   698  		return reflect.DeepEqual(axb.Data(), bxa.Data())
   699  
   700  	}
   701  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   702  		t.Errorf("Transitivity test for ElEq failed: %v", err)
   703  	}
   704  }
   705  func TestDense_ElNe_assame(t *testing.T) {
   706  	symFn := func(q *Dense) bool {
   707  		we, _ := willerr(q, nonComplexNumberTypes, nil)
   708  		_, ok := q.Engine().(ElEqer)
   709  		we = we || !ok
   710  
   711  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
   712  			return true // we exit early if the generated type is not something we can handle
   713  		}
   714  		r := newRand()
   715  		a := q.Clone().(*Dense)
   716  		b := q.Clone().(*Dense)
   717  
   718  		bv, _ := quick.Value(b.Dtype().Type, r)
   719  		b.Memset(bv.Interface())
   720  
   721  		axb, err := a.ElNe(b, AsSameType())
   722  		if err, retEarly := qcErrCheck(t, "ElNe - a∙b", a, b, we, err); retEarly {
   723  			if err != nil {
   724  				return false
   725  			}
   726  			return true
   727  		}
   728  
   729  		bxa, err := b.ElNe(a, AsSameType())
   730  		if err, retEarly := qcErrCheck(t, "ElNe - b∙a", a, b, we, err); retEarly {
   731  			if err != nil {
   732  				return false
   733  			}
   734  			return true
   735  		}
   736  		return reflect.DeepEqual(axb.Data(), bxa.Data())
   737  
   738  	}
   739  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   740  		t.Errorf("Transitivity test for ElNe failed: %v", err)
   741  	}
   742  }
   743  func TestDense_GtScalar(t *testing.T) {
   744  	transFn := func(q *Dense) bool {
   745  		we, _ := willerr(q, ordTypes, nil)
   746  		_, ok := q.Engine().(Gter)
   747  		we = we || !ok
   748  
   749  		r := newRand()
   750  		a := q.Clone().(*Dense)
   751  		bv, _ := quick.Value(a.Dtype().Type, r)
   752  		b := bv.Interface()
   753  		c := q.Clone().(*Dense)
   754  		cv, _ := quick.Value(c.Dtype().Type, r)
   755  		c.Memset(cv.Interface())
   756  
   757  		axb, err := a.GtScalar(b, true)
   758  		if err, retEarly := qcErrCheck(t, "Gt - a∙b", a, b, we, err); retEarly {
   759  			if err != nil {
   760  				return false
   761  			}
   762  			return true
   763  		}
   764  
   765  		bxc, err := c.GtScalar(b, false)
   766  		if err, retEarly := qcErrCheck(t, "Gt - b∙c", c, b, we, err); retEarly {
   767  			if err != nil {
   768  				return false
   769  			}
   770  			return true
   771  		}
   772  
   773  		axc, err := a.Gt(c)
   774  		if err, retEarly := qcErrCheck(t, "Gt - a∙c", a, c, we, err); retEarly {
   775  			if err != nil {
   776  				return false
   777  			}
   778  			return true
   779  		}
   780  
   781  		ab := axb.Bools()
   782  		bc := bxc.Bools()
   783  		ac := axc.Bools()
   784  		for i, vab := range ab {
   785  			if vab && bc[i] {
   786  				if !ac[i] {
   787  					return false
   788  				}
   789  			}
   790  		}
   791  
   792  		return true
   793  	}
   794  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   795  		t.Errorf("Transitivity test for Gt failed: %v", err)
   796  	}
   797  
   798  }
   799  func TestDense_GteScalar(t *testing.T) {
   800  	transFn := func(q *Dense) bool {
   801  		we, _ := willerr(q, ordTypes, nil)
   802  		_, ok := q.Engine().(Gteer)
   803  		we = we || !ok
   804  
   805  		r := newRand()
   806  		a := q.Clone().(*Dense)
   807  		bv, _ := quick.Value(a.Dtype().Type, r)
   808  		b := bv.Interface()
   809  		c := q.Clone().(*Dense)
   810  		cv, _ := quick.Value(c.Dtype().Type, r)
   811  		c.Memset(cv.Interface())
   812  
   813  		axb, err := a.GteScalar(b, true)
   814  		if err, retEarly := qcErrCheck(t, "Gte - a∙b", a, b, we, err); retEarly {
   815  			if err != nil {
   816  				return false
   817  			}
   818  			return true
   819  		}
   820  
   821  		bxc, err := c.GteScalar(b, false)
   822  		if err, retEarly := qcErrCheck(t, "Gte - b∙c", c, b, we, err); retEarly {
   823  			if err != nil {
   824  				return false
   825  			}
   826  			return true
   827  		}
   828  
   829  		axc, err := a.Gte(c)
   830  		if err, retEarly := qcErrCheck(t, "Gte - a∙c", a, c, we, err); retEarly {
   831  			if err != nil {
   832  				return false
   833  			}
   834  			return true
   835  		}
   836  
   837  		ab := axb.Bools()
   838  		bc := bxc.Bools()
   839  		ac := axc.Bools()
   840  		for i, vab := range ab {
   841  			if vab && bc[i] {
   842  				if !ac[i] {
   843  					return false
   844  				}
   845  			}
   846  		}
   847  
   848  		return true
   849  	}
   850  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   851  		t.Errorf("Transitivity test for Gte failed: %v", err)
   852  	}
   853  
   854  }
   855  func TestDense_LtScalar(t *testing.T) {
   856  	transFn := func(q *Dense) bool {
   857  		we, _ := willerr(q, ordTypes, nil)
   858  		_, ok := q.Engine().(Lter)
   859  		we = we || !ok
   860  
   861  		r := newRand()
   862  		a := q.Clone().(*Dense)
   863  		bv, _ := quick.Value(a.Dtype().Type, r)
   864  		b := bv.Interface()
   865  		c := q.Clone().(*Dense)
   866  		cv, _ := quick.Value(c.Dtype().Type, r)
   867  		c.Memset(cv.Interface())
   868  
   869  		axb, err := a.LtScalar(b, true)
   870  		if err, retEarly := qcErrCheck(t, "Lt - a∙b", a, b, we, err); retEarly {
   871  			if err != nil {
   872  				return false
   873  			}
   874  			return true
   875  		}
   876  
   877  		bxc, err := c.LtScalar(b, false)
   878  		if err, retEarly := qcErrCheck(t, "Lt - b∙c", c, b, we, err); retEarly {
   879  			if err != nil {
   880  				return false
   881  			}
   882  			return true
   883  		}
   884  
   885  		axc, err := a.Lt(c)
   886  		if err, retEarly := qcErrCheck(t, "Lt - a∙c", a, c, we, err); retEarly {
   887  			if err != nil {
   888  				return false
   889  			}
   890  			return true
   891  		}
   892  
   893  		ab := axb.Bools()
   894  		bc := bxc.Bools()
   895  		ac := axc.Bools()
   896  		for i, vab := range ab {
   897  			if vab && bc[i] {
   898  				if !ac[i] {
   899  					return false
   900  				}
   901  			}
   902  		}
   903  
   904  		return true
   905  	}
   906  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   907  		t.Errorf("Transitivity test for Lt failed: %v", err)
   908  	}
   909  
   910  }
   911  func TestDense_LteScalar(t *testing.T) {
   912  	transFn := func(q *Dense) bool {
   913  		we, _ := willerr(q, ordTypes, nil)
   914  		_, ok := q.Engine().(Lteer)
   915  		we = we || !ok
   916  
   917  		r := newRand()
   918  		a := q.Clone().(*Dense)
   919  		bv, _ := quick.Value(a.Dtype().Type, r)
   920  		b := bv.Interface()
   921  		c := q.Clone().(*Dense)
   922  		cv, _ := quick.Value(c.Dtype().Type, r)
   923  		c.Memset(cv.Interface())
   924  
   925  		axb, err := a.LteScalar(b, true)
   926  		if err, retEarly := qcErrCheck(t, "Lte - a∙b", a, b, we, err); retEarly {
   927  			if err != nil {
   928  				return false
   929  			}
   930  			return true
   931  		}
   932  
   933  		bxc, err := c.LteScalar(b, false)
   934  		if err, retEarly := qcErrCheck(t, "Lte - b∙c", c, b, we, err); retEarly {
   935  			if err != nil {
   936  				return false
   937  			}
   938  			return true
   939  		}
   940  
   941  		axc, err := a.Lte(c)
   942  		if err, retEarly := qcErrCheck(t, "Lte - a∙c", a, c, we, err); retEarly {
   943  			if err != nil {
   944  				return false
   945  			}
   946  			return true
   947  		}
   948  
   949  		ab := axb.Bools()
   950  		bc := bxc.Bools()
   951  		ac := axc.Bools()
   952  		for i, vab := range ab {
   953  			if vab && bc[i] {
   954  				if !ac[i] {
   955  					return false
   956  				}
   957  			}
   958  		}
   959  
   960  		return true
   961  	}
   962  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
   963  		t.Errorf("Transitivity test for Lte failed: %v", err)
   964  	}
   965  
   966  }
   967  func TestDense_ElEqScalar(t *testing.T) {
   968  	transFn := func(q *Dense) bool {
   969  		we, _ := willerr(q, eqTypes, nil)
   970  		_, ok := q.Engine().(ElEqer)
   971  		we = we || !ok
   972  
   973  		r := newRand()
   974  		a := q.Clone().(*Dense)
   975  		bv, _ := quick.Value(a.Dtype().Type, r)
   976  		b := bv.Interface()
   977  		c := q.Clone().(*Dense)
   978  		cv, _ := quick.Value(c.Dtype().Type, r)
   979  		c.Memset(cv.Interface())
   980  
   981  		axb, err := a.ElEqScalar(b, true)
   982  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
   983  			if err != nil {
   984  				return false
   985  			}
   986  			return true
   987  		}
   988  
   989  		bxc, err := c.ElEqScalar(b, false)
   990  		if err, retEarly := qcErrCheck(t, "ElEq - b∙c", c, b, we, err); retEarly {
   991  			if err != nil {
   992  				return false
   993  			}
   994  			return true
   995  		}
   996  
   997  		axc, err := a.ElEq(c)
   998  		if err, retEarly := qcErrCheck(t, "ElEq - a∙c", a, c, we, err); retEarly {
   999  			if err != nil {
  1000  				return false
  1001  			}
  1002  			return true
  1003  		}
  1004  
  1005  		ab := axb.Bools()
  1006  		bc := bxc.Bools()
  1007  		ac := axc.Bools()
  1008  		for i, vab := range ab {
  1009  			if vab && bc[i] {
  1010  				if !ac[i] {
  1011  					return false
  1012  				}
  1013  			}
  1014  		}
  1015  
  1016  		return true
  1017  	}
  1018  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1019  		t.Errorf("Transitivity test for ElEq failed: %v", err)
  1020  	}
  1021  
  1022  	symFn := func(q *Dense) bool {
  1023  		we, _ := willerr(q, eqTypes, nil)
  1024  		_, ok := q.Engine().(ElEqer)
  1025  		we = we || !ok
  1026  
  1027  		r := newRand()
  1028  		a := q.Clone().(*Dense)
  1029  		bv, _ := quick.Value(a.Dtype().Type, r)
  1030  		b := bv.Interface()
  1031  
  1032  		axb, err := a.ElEqScalar(b, true)
  1033  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
  1034  			if err != nil {
  1035  				return false
  1036  			}
  1037  			return true
  1038  		}
  1039  
  1040  		bxa, err := a.ElEqScalar(b, false)
  1041  		if err, retEarly := qcErrCheck(t, "ElEq - b∙a", a, b, we, err); retEarly {
  1042  			if err != nil {
  1043  				return false
  1044  			}
  1045  			return true
  1046  		}
  1047  		return reflect.DeepEqual(axb.Data(), bxa.Data())
  1048  
  1049  	}
  1050  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1051  		t.Errorf("Symmetry test for ElEq failed: %v", err)
  1052  	}
  1053  }
  1054  func TestDense_ElNeScalar(t *testing.T) {
  1055  	symFn := func(q *Dense) bool {
  1056  		we, _ := willerr(q, eqTypes, nil)
  1057  		_, ok := q.Engine().(ElEqer)
  1058  		we = we || !ok
  1059  
  1060  		r := newRand()
  1061  		a := q.Clone().(*Dense)
  1062  		bv, _ := quick.Value(a.Dtype().Type, r)
  1063  		b := bv.Interface()
  1064  
  1065  		axb, err := a.ElNeScalar(b, true)
  1066  		if err, retEarly := qcErrCheck(t, "ElNe - a∙b", a, b, we, err); retEarly {
  1067  			if err != nil {
  1068  				return false
  1069  			}
  1070  			return true
  1071  		}
  1072  
  1073  		bxa, err := a.ElNeScalar(b, false)
  1074  		if err, retEarly := qcErrCheck(t, "ElNe - b∙a", a, b, we, err); retEarly {
  1075  			if err != nil {
  1076  				return false
  1077  			}
  1078  			return true
  1079  		}
  1080  		return reflect.DeepEqual(axb.Data(), bxa.Data())
  1081  
  1082  	}
  1083  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1084  		t.Errorf("Symmetry test for ElNe failed: %v", err)
  1085  	}
  1086  }
  1087  func TestDense_GtScalar_assame(t *testing.T) {
  1088  	transFn := func(q *Dense) bool {
  1089  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1090  		_, ok := q.Engine().(Gter)
  1091  		we = we || !ok
  1092  
  1093  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1094  			return true // we exit early if the generated type is not something we can handle
  1095  		}
  1096  		r := newRand()
  1097  		a := q.Clone().(*Dense)
  1098  		bv, _ := quick.Value(a.Dtype().Type, r)
  1099  		b := bv.Interface()
  1100  		c := q.Clone().(*Dense)
  1101  		cv, _ := quick.Value(c.Dtype().Type, r)
  1102  		c.Memset(cv.Interface())
  1103  
  1104  		axb, err := a.GtScalar(b, true, AsSameType())
  1105  		if err, retEarly := qcErrCheck(t, "Gt - a∙b", a, b, we, err); retEarly {
  1106  			if err != nil {
  1107  				return false
  1108  			}
  1109  			return true
  1110  		}
  1111  
  1112  		bxc, err := c.GtScalar(b, false, AsSameType())
  1113  		if err, retEarly := qcErrCheck(t, "Gt - b∙c", c, b, we, err); retEarly {
  1114  			if err != nil {
  1115  				return false
  1116  			}
  1117  			return true
  1118  		}
  1119  
  1120  		axc, err := a.Gt(c, AsSameType())
  1121  		if err, retEarly := qcErrCheck(t, "Gt - a∙c", a, c, we, err); retEarly {
  1122  			if err != nil {
  1123  				return false
  1124  			}
  1125  			return true
  1126  		}
  1127  
  1128  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
  1129  			t.Errorf("a: %-v", a)
  1130  			t.Errorf("b: %-v", b)
  1131  			t.Errorf("c: %-v", c)
  1132  			t.Errorf("axb.Data() %v", axb.Data())
  1133  			t.Errorf("bxc.Data() %v", bxc.Data())
  1134  			t.Errorf("axc.Data() %v", axc.Data())
  1135  			return false
  1136  		}
  1137  
  1138  		return true
  1139  	}
  1140  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1141  		t.Errorf("Transitivity test for Gt failed: %v", err)
  1142  	}
  1143  
  1144  }
  1145  func TestDense_GteScalar_assame(t *testing.T) {
  1146  	transFn := func(q *Dense) bool {
  1147  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1148  		_, ok := q.Engine().(Gteer)
  1149  		we = we || !ok
  1150  
  1151  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1152  			return true // we exit early if the generated type is not something we can handle
  1153  		}
  1154  		r := newRand()
  1155  		a := q.Clone().(*Dense)
  1156  		bv, _ := quick.Value(a.Dtype().Type, r)
  1157  		b := bv.Interface()
  1158  		c := q.Clone().(*Dense)
  1159  		cv, _ := quick.Value(c.Dtype().Type, r)
  1160  		c.Memset(cv.Interface())
  1161  
  1162  		axb, err := a.GteScalar(b, true, AsSameType())
  1163  		if err, retEarly := qcErrCheck(t, "Gte - a∙b", a, b, we, err); retEarly {
  1164  			if err != nil {
  1165  				return false
  1166  			}
  1167  			return true
  1168  		}
  1169  
  1170  		bxc, err := c.GteScalar(b, false, AsSameType())
  1171  		if err, retEarly := qcErrCheck(t, "Gte - b∙c", c, b, we, err); retEarly {
  1172  			if err != nil {
  1173  				return false
  1174  			}
  1175  			return true
  1176  		}
  1177  
  1178  		axc, err := a.Gte(c, AsSameType())
  1179  		if err, retEarly := qcErrCheck(t, "Gte - a∙c", a, c, we, err); retEarly {
  1180  			if err != nil {
  1181  				return false
  1182  			}
  1183  			return true
  1184  		}
  1185  
  1186  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
  1187  			t.Errorf("a: %-v", a)
  1188  			t.Errorf("b: %-v", b)
  1189  			t.Errorf("c: %-v", c)
  1190  			t.Errorf("axb.Data() %v", axb.Data())
  1191  			t.Errorf("bxc.Data() %v", bxc.Data())
  1192  			t.Errorf("axc.Data() %v", axc.Data())
  1193  			return false
  1194  		}
  1195  
  1196  		return true
  1197  	}
  1198  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1199  		t.Errorf("Transitivity test for Gte failed: %v", err)
  1200  	}
  1201  
  1202  }
  1203  func TestDense_LtScalar_assame(t *testing.T) {
  1204  	transFn := func(q *Dense) bool {
  1205  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1206  		_, ok := q.Engine().(Lter)
  1207  		we = we || !ok
  1208  
  1209  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1210  			return true // we exit early if the generated type is not something we can handle
  1211  		}
  1212  		r := newRand()
  1213  		a := q.Clone().(*Dense)
  1214  		bv, _ := quick.Value(a.Dtype().Type, r)
  1215  		b := bv.Interface()
  1216  		c := q.Clone().(*Dense)
  1217  		cv, _ := quick.Value(c.Dtype().Type, r)
  1218  		c.Memset(cv.Interface())
  1219  
  1220  		axb, err := a.LtScalar(b, true, AsSameType())
  1221  		if err, retEarly := qcErrCheck(t, "Lt - a∙b", a, b, we, err); retEarly {
  1222  			if err != nil {
  1223  				return false
  1224  			}
  1225  			return true
  1226  		}
  1227  
  1228  		bxc, err := c.LtScalar(b, false, AsSameType())
  1229  		if err, retEarly := qcErrCheck(t, "Lt - b∙c", c, b, we, err); retEarly {
  1230  			if err != nil {
  1231  				return false
  1232  			}
  1233  			return true
  1234  		}
  1235  
  1236  		axc, err := a.Lt(c, AsSameType())
  1237  		if err, retEarly := qcErrCheck(t, "Lt - a∙c", a, c, we, err); retEarly {
  1238  			if err != nil {
  1239  				return false
  1240  			}
  1241  			return true
  1242  		}
  1243  
  1244  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
  1245  			t.Errorf("a: %-v", a)
  1246  			t.Errorf("b: %-v", b)
  1247  			t.Errorf("c: %-v", c)
  1248  			t.Errorf("axb.Data() %v", axb.Data())
  1249  			t.Errorf("bxc.Data() %v", bxc.Data())
  1250  			t.Errorf("axc.Data() %v", axc.Data())
  1251  			return false
  1252  		}
  1253  
  1254  		return true
  1255  	}
  1256  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1257  		t.Errorf("Transitivity test for Lt failed: %v", err)
  1258  	}
  1259  
  1260  }
  1261  func TestDense_LteScalar_assame(t *testing.T) {
  1262  	transFn := func(q *Dense) bool {
  1263  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1264  		_, ok := q.Engine().(Lteer)
  1265  		we = we || !ok
  1266  
  1267  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1268  			return true // we exit early if the generated type is not something we can handle
  1269  		}
  1270  		r := newRand()
  1271  		a := q.Clone().(*Dense)
  1272  		bv, _ := quick.Value(a.Dtype().Type, r)
  1273  		b := bv.Interface()
  1274  		c := q.Clone().(*Dense)
  1275  		cv, _ := quick.Value(c.Dtype().Type, r)
  1276  		c.Memset(cv.Interface())
  1277  
  1278  		axb, err := a.LteScalar(b, true, AsSameType())
  1279  		if err, retEarly := qcErrCheck(t, "Lte - a∙b", a, b, we, err); retEarly {
  1280  			if err != nil {
  1281  				return false
  1282  			}
  1283  			return true
  1284  		}
  1285  
  1286  		bxc, err := c.LteScalar(b, false, AsSameType())
  1287  		if err, retEarly := qcErrCheck(t, "Lte - b∙c", c, b, we, err); retEarly {
  1288  			if err != nil {
  1289  				return false
  1290  			}
  1291  			return true
  1292  		}
  1293  
  1294  		axc, err := a.Lte(c, AsSameType())
  1295  		if err, retEarly := qcErrCheck(t, "Lte - a∙c", a, c, we, err); retEarly {
  1296  			if err != nil {
  1297  				return false
  1298  			}
  1299  			return true
  1300  		}
  1301  
  1302  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
  1303  			t.Errorf("a: %-v", a)
  1304  			t.Errorf("b: %-v", b)
  1305  			t.Errorf("c: %-v", c)
  1306  			t.Errorf("axb.Data() %v", axb.Data())
  1307  			t.Errorf("bxc.Data() %v", bxc.Data())
  1308  			t.Errorf("axc.Data() %v", axc.Data())
  1309  			return false
  1310  		}
  1311  
  1312  		return true
  1313  	}
  1314  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1315  		t.Errorf("Transitivity test for Lte failed: %v", err)
  1316  	}
  1317  
  1318  }
  1319  func TestDense_ElEqScalar_assame(t *testing.T) {
  1320  	transFn := func(q *Dense) bool {
  1321  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1322  		_, ok := q.Engine().(ElEqer)
  1323  		we = we || !ok
  1324  
  1325  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1326  			return true // we exit early if the generated type is not something we can handle
  1327  		}
  1328  		r := newRand()
  1329  		a := q.Clone().(*Dense)
  1330  		bv, _ := quick.Value(a.Dtype().Type, r)
  1331  		b := bv.Interface()
  1332  		c := q.Clone().(*Dense)
  1333  		cv, _ := quick.Value(c.Dtype().Type, r)
  1334  		c.Memset(cv.Interface())
  1335  
  1336  		axb, err := a.ElEqScalar(b, true, AsSameType())
  1337  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
  1338  			if err != nil {
  1339  				return false
  1340  			}
  1341  			return true
  1342  		}
  1343  
  1344  		bxc, err := c.ElEqScalar(b, false, AsSameType())
  1345  		if err, retEarly := qcErrCheck(t, "ElEq - b∙c", c, b, we, err); retEarly {
  1346  			if err != nil {
  1347  				return false
  1348  			}
  1349  			return true
  1350  		}
  1351  
  1352  		axc, err := a.ElEq(c, AsSameType())
  1353  		if err, retEarly := qcErrCheck(t, "ElEq - a∙c", a, c, we, err); retEarly {
  1354  			if err != nil {
  1355  				return false
  1356  			}
  1357  			return true
  1358  		}
  1359  
  1360  		if !threewayEq(axb.Data(), bxc.Data(), axc.Data()) {
  1361  			t.Errorf("a: %-v", a)
  1362  			t.Errorf("b: %-v", b)
  1363  			t.Errorf("c: %-v", c)
  1364  			t.Errorf("axb.Data() %v", axb.Data())
  1365  			t.Errorf("bxc.Data() %v", bxc.Data())
  1366  			t.Errorf("axc.Data() %v", axc.Data())
  1367  			return false
  1368  		}
  1369  
  1370  		return true
  1371  	}
  1372  	if err := quick.Check(transFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1373  		t.Errorf("Transitivity test for ElEq failed: %v", err)
  1374  	}
  1375  
  1376  	symFn := func(q *Dense) bool {
  1377  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1378  		_, ok := q.Engine().(ElEqer)
  1379  		we = we || !ok
  1380  
  1381  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1382  			return true // we exit early if the generated type is not something we can handle
  1383  		}
  1384  		r := newRand()
  1385  		a := q.Clone().(*Dense)
  1386  		bv, _ := quick.Value(a.Dtype().Type, r)
  1387  		b := bv.Interface()
  1388  
  1389  		axb, err := a.ElEqScalar(b, true, AsSameType())
  1390  		if err, retEarly := qcErrCheck(t, "ElEq - a∙b", a, b, we, err); retEarly {
  1391  			if err != nil {
  1392  				return false
  1393  			}
  1394  			return true
  1395  		}
  1396  
  1397  		bxa, err := a.ElEqScalar(b, false, AsSameType())
  1398  		if err, retEarly := qcErrCheck(t, "ElEq - b∙a", a, b, we, err); retEarly {
  1399  			if err != nil {
  1400  				return false
  1401  			}
  1402  			return true
  1403  		}
  1404  		return reflect.DeepEqual(axb.Data(), bxa.Data())
  1405  
  1406  	}
  1407  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1408  		t.Errorf("Symmetry test for ElEq failed: %v", err)
  1409  	}
  1410  }
  1411  func TestDense_ElNeScalar_assame(t *testing.T) {
  1412  	symFn := func(q *Dense) bool {
  1413  		we, _ := willerr(q, nonComplexNumberTypes, nil)
  1414  		_, ok := q.Engine().(ElEqer)
  1415  		we = we || !ok
  1416  
  1417  		if err := typeclassCheck(q.Dtype(), nonComplexNumberTypes); err != nil {
  1418  			return true // we exit early if the generated type is not something we can handle
  1419  		}
  1420  		r := newRand()
  1421  		a := q.Clone().(*Dense)
  1422  		bv, _ := quick.Value(a.Dtype().Type, r)
  1423  		b := bv.Interface()
  1424  
  1425  		axb, err := a.ElNeScalar(b, true, AsSameType())
  1426  		if err, retEarly := qcErrCheck(t, "ElNe - a∙b", a, b, we, err); retEarly {
  1427  			if err != nil {
  1428  				return false
  1429  			}
  1430  			return true
  1431  		}
  1432  
  1433  		bxa, err := a.ElNeScalar(b, false, AsSameType())
  1434  		if err, retEarly := qcErrCheck(t, "ElNe - b∙a", a, b, we, err); retEarly {
  1435  			if err != nil {
  1436  				return false
  1437  			}
  1438  			return true
  1439  		}
  1440  		return reflect.DeepEqual(axb.Data(), bxa.Data())
  1441  
  1442  	}
  1443  	if err := quick.Check(symFn, &quick.Config{Rand: newRand(), MaxCount: quickchecks}); err != nil {
  1444  		t.Errorf("Symmetry test for ElNe failed: %v", err)
  1445  	}
  1446  }