(svn r20162) -Fix [FS#3954]: integer comparison failed in case the difference was more than "MAX_UINT"/2
This commit is contained in:
		| @@ -1757,6 +1757,48 @@ function Regression::PrintSubsidy(subsidy_id) | |||||||
| 	print("        GetCargoType():        " + AISubsidy.GetCargoType(subsidy_id)); | 	print("        GetCargoType():        " + AISubsidy.GetCargoType(subsidy_id)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function Regression::Math() | ||||||
|  | { | ||||||
|  | 	print(""); | ||||||
|  | 	print("--Math--"); | ||||||
|  | 	print("  -2147483648 < -2147483647:   " + (-2147483648 < -2147483647)); | ||||||
|  | 	print("  -2147483648 < -1         :   " + (-2147483648 < -1         )); | ||||||
|  | 	print("  -2147483648 <  0         :   " + (-2147483648 <  0         )); | ||||||
|  | 	print("  -2147483648 <  1         :   " + (-2147483648 <  1         )); | ||||||
|  | 	print("  -2147483648 <  2147483647:   " + (-2147483648 <  2147483647)); | ||||||
|  |  | ||||||
|  | 	print("  -2147483647 < -2147483648:   " + (-2147483647 < -2147483648)); | ||||||
|  | 	print("  -1          < -2147483648:   " + (-1          < -2147483648)); | ||||||
|  | 	print("   0          < -2147483648:   " + ( 0          < -2147483648)); | ||||||
|  | 	print("   1          < -2147483648:   " + ( 1          < -2147483648)); | ||||||
|  | 	print("   2147483647 < -2147483648:   " + ( 2147483647 < -2147483648)); | ||||||
|  |  | ||||||
|  | 	print("  -1          >  2147483647:   " + (-1          >  2147483647)); | ||||||
|  | 	print("  -1          >  1         :   " + (-1          >  1         )); | ||||||
|  | 	print("  -1          >  0         :   " + (-1          >  0         )); | ||||||
|  | 	print("  -1          > -1         :   " + (-1          > -1         )); | ||||||
|  | 	print("  -1          > -2147483648:   " + (-1          > -2147483648)); | ||||||
|  |  | ||||||
|  | 	print("   1          >  2147483647:   " + ( 1          >  2147483647)); | ||||||
|  | 	print("   1          >  1         :   " + ( 1          >  1         )); | ||||||
|  | 	print("   1          >  0         :   " + ( 1          >  0         )); | ||||||
|  | 	print("   1          > -1         :   " + ( 1          > -1         )); | ||||||
|  | 	print("   1          > -2147483648:   " + ( 1          > -2147483648)); | ||||||
|  |  | ||||||
|  | 	print("   2147483647 >  2147483646:   " + ( 2147483647 >  2147483646)); | ||||||
|  | 	print("   2147483647 >  1         :   " + ( 2147483647 >  1         )); | ||||||
|  | 	print("   2147483647 >  0         :   " + ( 2147483647 >  0         )); | ||||||
|  | 	print("   2147483647 > -1         :   " + ( 2147483647 > -1         )); | ||||||
|  | 	print("   2147483647 > -2147483648:   " + ( 2147483647 > -2147483648)); | ||||||
|  |  | ||||||
|  | 	print("   2147483646 >  2147483647:   " + ( 2147483646 >  2147483647)); | ||||||
|  | 	print("   1          >  2147483647:   " + ( 1          >  2147483647)); | ||||||
|  | 	print("   0          >  2147483647:   " + ( 0          >  2147483647)); | ||||||
|  | 	print("  -1          >  2147483647:   " + (-1          >  2147483647)); | ||||||
|  | 	print("  -2147483648 >  2147483647:   " + (-2147483648 >  2147483647)); | ||||||
|  |  | ||||||
|  | 	print("   13725      > -2147483648:   " + ( 13725      > -2147483648)); | ||||||
|  | } | ||||||
|  |  | ||||||
| function Regression::Start() | function Regression::Start() | ||||||
| { | { | ||||||
| @@ -1822,5 +1864,7 @@ function Regression::Start() | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	print("  IsEventWaiting:        false"); | 	print("  IsEventWaiting:        false"); | ||||||
|  |  | ||||||
|  | 	this.Math(); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8632,4 +8632,37 @@ ERROR: IsEnd() is invalid as Begin() is never called | |||||||
|     GetEventType:        6 |     GetEventType:        6 | ||||||
|       Unknown Event |       Unknown Event | ||||||
|   IsEventWaiting:        false |   IsEventWaiting:        false | ||||||
|  |  | ||||||
|  | --Math-- | ||||||
|  |   -2147483648 < -2147483647:   true | ||||||
|  |   -2147483648 < -1         :   true | ||||||
|  |   -2147483648 <  0         :   true | ||||||
|  |   -2147483648 <  1         :   true | ||||||
|  |   -2147483648 <  2147483647:   true | ||||||
|  |   -2147483647 < -2147483648:   false | ||||||
|  |   -1          < -2147483648:   false | ||||||
|  |    0          < -2147483648:   false | ||||||
|  |    1          < -2147483648:   false | ||||||
|  |    2147483647 < -2147483648:   false | ||||||
|  |   -1          >  2147483647:   false | ||||||
|  |   -1          >  1         :   false | ||||||
|  |   -1          >  0         :   false | ||||||
|  |   -1          > -1         :   false | ||||||
|  |   -1          > -2147483648:   true | ||||||
|  |    1          >  2147483647:   false | ||||||
|  |    1          >  1         :   false | ||||||
|  |    1          >  0         :   true | ||||||
|  |    1          > -1         :   true | ||||||
|  |    1          > -2147483648:   true | ||||||
|  |    2147483647 >  2147483646:   true | ||||||
|  |    2147483647 >  1         :   true | ||||||
|  |    2147483647 >  0         :   true | ||||||
|  |    2147483647 > -1         :   true | ||||||
|  |    2147483647 > -2147483648:   true | ||||||
|  |    2147483646 >  2147483647:   false | ||||||
|  |    1          >  2147483647:   false | ||||||
|  |    0          >  2147483647:   false | ||||||
|  |   -1          >  2147483647:   false | ||||||
|  |   -2147483648 >  2147483647:   false | ||||||
|  |    13725      > -2147483648:   true | ||||||
| ERROR: The AI died unexpectedly. | ERROR: The AI died unexpectedly. | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								src/3rdparty/squirrel/squirrel/sqvm.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								src/3rdparty/squirrel/squirrel/sqvm.cpp
									
									
									
									
										vendored
									
									
								
							| @@ -186,7 +186,8 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result) | |||||||
| 		case OT_STRING: | 		case OT_STRING: | ||||||
| 			_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2))); | 			_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2))); | ||||||
| 		case OT_INTEGER: | 		case OT_INTEGER: | ||||||
| 			_RET_SUCCEED(_integer(o1)-_integer(o2)); | 			/* FS#3954: wrong integer comparison */ | ||||||
|  | 			_RET_SUCCEED((_integer(o1)<_integer(o2))?-1:(_integer(o1)==_integer(o2))?0:1); | ||||||
| 		case OT_FLOAT: | 		case OT_FLOAT: | ||||||
| 			_RET_SUCCEED((_float(o1)<_float(o2))?-1:1); | 			_RET_SUCCEED((_float(o1)<_float(o2))?-1:1); | ||||||
| 		case OT_TABLE: | 		case OT_TABLE: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 rubidium
					rubidium