51 lines
		
	
	
		
			875 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			875 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | package math | ||
|  | 
 | ||
|  | import ( | ||
|  | 	gmath "math" | ||
|  | 	"testing" | ||
|  | ) | ||
|  | 
 | ||
|  | type operation byte | ||
|  | 
 | ||
|  | const ( | ||
|  | 	sub operation = iota | ||
|  | 	add | ||
|  | 	mul | ||
|  | ) | ||
|  | 
 | ||
|  | func TestOverflow(t *testing.T) { | ||
|  | 	for i, test := range []struct { | ||
|  | 		x        uint64 | ||
|  | 		y        uint64 | ||
|  | 		overflow bool | ||
|  | 		op       operation | ||
|  | 	}{ | ||
|  | 		// add operations | ||
|  | 		{gmath.MaxUint64, 1, true, add}, | ||
|  | 		{gmath.MaxUint64 - 1, 1, false, add}, | ||
|  | 
 | ||
|  | 		// sub operations | ||
|  | 		{0, 1, true, sub}, | ||
|  | 		{0, 0, false, sub}, | ||
|  | 
 | ||
|  | 		// mul operations | ||
|  | 		{10, 10, false, mul}, | ||
|  | 		{gmath.MaxUint64, 2, true, mul}, | ||
|  | 		{gmath.MaxUint64, 1, false, mul}, | ||
|  | 	} { | ||
|  | 		var overflows bool | ||
|  | 		switch test.op { | ||
|  | 		case sub: | ||
|  | 			_, overflows = SafeSub(test.x, test.y) | ||
|  | 		case add: | ||
|  | 			_, overflows = SafeAdd(test.x, test.y) | ||
|  | 		case mul: | ||
|  | 			_, overflows = SafeMul(test.x, test.y) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if test.overflow != overflows { | ||
|  | 			t.Errorf("%d failed. Expected test to be %v, got %v", i, test.overflow, overflows) | ||
|  | 		} | ||
|  | 	} | ||
|  | } |