| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | import math | 
					
						
							| 
									
										
										
										
											2013-08-08 15:03:45 +03:00
										 |  |  | from test.test_json import PyTest, CTest | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | class TestFloat: | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     def test_floats(self): | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         for num in [1617161771.7650001, math.pi, math.pi**100, math.pi**-100, 3.1]: | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |             self.assertEqual(float(self.dumps(num)), num) | 
					
						
							|  |  |  |             self.assertEqual(self.loads(self.dumps(num)), num) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_ints(self): | 
					
						
							|  |  |  |         for num in [1, 1<<32, 1<<64]: | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  |             self.assertEqual(self.dumps(num), str(num)) | 
					
						
							|  |  |  |             self.assertEqual(int(self.dumps(num)), num) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-26 19:24:20 +02:00
										 |  |  |     def test_out_of_range(self): | 
					
						
							|  |  |  |         self.assertEqual(self.loads('[23456789012E666]'), [float('inf')]) | 
					
						
							|  |  |  |         self.assertEqual(self.loads('[-23456789012E666]'), [float('-inf')]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_allow_nan(self): | 
					
						
							|  |  |  |         for val in (float('inf'), float('-inf'), float('nan')): | 
					
						
							|  |  |  |             out = self.dumps([val]) | 
					
						
							|  |  |  |             if val == val:  # inf | 
					
						
							|  |  |  |                 self.assertEqual(self.loads(out), [val]) | 
					
						
							|  |  |  |             else:  # nan | 
					
						
							|  |  |  |                 res = self.loads(out) | 
					
						
							|  |  |  |                 self.assertEqual(len(res), 1) | 
					
						
							|  |  |  |                 self.assertNotEqual(res[0], res[0]) | 
					
						
							|  |  |  |             self.assertRaises(ValueError, self.dumps, [val], allow_nan=False) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:47:51 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | class TestPyFloat(TestFloat, PyTest): pass | 
					
						
							|  |  |  | class TestCFloat(TestFloat, CTest): pass |