Tidy up structure of briefcase
I had a spare fifteen minutes and decided that I should tidy up my monorepo. The work of tidying up is not finished; this is a small step in the right direction. TL;DR - Created a tools directory - Created a scratch directory (see README.md for more information) - Added README.md to third_party - Renamed delete_dotfile_symlinks -> symlinkManager - Packaged symlinkManager as an executable symlink-mgr using buildGo
This commit is contained in:
		
							parent
							
								
									5ec5a6da8c
								
							
						
					
					
						commit
						fabf1c9334
					
				
					 89 changed files with 53 additions and 41 deletions
				
			
		|  | @ -1,246 +0,0 @@ | |||
| import unittest | ||||
| 
 | ||||
| 
 | ||||
| ################################################################################ | ||||
| # Solution | ||||
| ################################################################################ | ||||
| # bottom :: Rectangle -> Int | ||||
| def bottom(x): | ||||
|     return x.get('bottom_y') | ||||
| 
 | ||||
| 
 | ||||
| # top :: Rectangle -> Int | ||||
| def top(x): | ||||
|     return bottom(x) + x.get('height') | ||||
| 
 | ||||
| 
 | ||||
| # left :: Rectangle -> Int | ||||
| def left(x): | ||||
|     return x.get('left_x') | ||||
| 
 | ||||
| 
 | ||||
| # right :: Rectangle -> Int | ||||
| def right(x): | ||||
|     return left(x) + x.get('width') | ||||
| 
 | ||||
| 
 | ||||
| # sort_highest :: Rectangle -> Rectangle -> (Rectangle, Rectangle) | ||||
| def sort_highest(x, y): | ||||
|     if top(x) >= top(y): | ||||
|         return x, y | ||||
|     else: | ||||
|         return y, x | ||||
| 
 | ||||
| 
 | ||||
| # sort_leftmost :: Rectangle -> Rectangle -> (Rectangle, Rectangle) | ||||
| def sort_leftmost(x, y): | ||||
|     if left(x) <= left(y): | ||||
|         return x, y | ||||
|     else: | ||||
|         return y, x | ||||
| 
 | ||||
| 
 | ||||
| # rectify :: Int -> Int -> Int -> Int -> Rectify | ||||
| def rectify(top=None, bottom=None, left=None, right=None): | ||||
|     assert top >= bottom | ||||
|     assert left <= right | ||||
|     return { | ||||
|         'left_x': left, | ||||
|         'bottom_y': bottom, | ||||
|         'width': right - left, | ||||
|         'height': top - bottom, | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| # empty_rect :: Rectangle | ||||
| def empty_rect(): | ||||
|     return { | ||||
|         'left_x': None, | ||||
|         'bottom_y': None, | ||||
|         'width': None, | ||||
|         'height': None, | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| # find_rectangular_overlap :: Rectangle -> Rectangle -> Maybe(Rectangle) | ||||
| def find_rectangular_overlap(x, y): | ||||
|     ha, hb = sort_highest(x, y) | ||||
|     la, lb = sort_leftmost(x, y) | ||||
| 
 | ||||
|     if bottom(hb) <= top(hb) <= bottom(ha) <= top(ha): | ||||
|         return empty_rect() | ||||
| 
 | ||||
|     if left(la) <= right(la) <= left(lb) <= right(lb): | ||||
|         return empty_rect() | ||||
| 
 | ||||
|     # We should have an intersection here. | ||||
|     verts = [bottom(ha), top(ha), bottom(hb), top(hb)] | ||||
|     verts.sort() | ||||
|     horzs = [left(la), right(la), left(lb), right(lb)] | ||||
|     horzs.sort() | ||||
|     return rectify(top=verts[2], | ||||
|                    bottom=verts[1], | ||||
|                    left=horzs[1], | ||||
|                    right=horzs[2]) | ||||
| 
 | ||||
| 
 | ||||
| ################################################################################ | ||||
| # Tests | ||||
| ################################################################################ | ||||
| class Test(unittest.TestCase): | ||||
|     def test_overlap_along_both_axes(self): | ||||
|         rect1 = { | ||||
|             'left_x': 1, | ||||
|             'bottom_y': 1, | ||||
|             'width': 6, | ||||
|             'height': 3, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 5, | ||||
|             'bottom_y': 2, | ||||
|             'width': 3, | ||||
|             'height': 6, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': 5, | ||||
|             'bottom_y': 2, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_one_rectangle_inside_another(self): | ||||
|         rect1 = { | ||||
|             'left_x': 1, | ||||
|             'bottom_y': 1, | ||||
|             'width': 6, | ||||
|             'height': 6, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 3, | ||||
|             'bottom_y': 3, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': 3, | ||||
|             'bottom_y': 3, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_both_rectangles_the_same(self): | ||||
|         rect1 = { | ||||
|             'left_x': 2, | ||||
|             'bottom_y': 2, | ||||
|             'width': 4, | ||||
|             'height': 4, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 2, | ||||
|             'bottom_y': 2, | ||||
|             'width': 4, | ||||
|             'height': 4, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': 2, | ||||
|             'bottom_y': 2, | ||||
|             'width': 4, | ||||
|             'height': 4, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_touch_on_horizontal_edge(self): | ||||
|         rect1 = { | ||||
|             'left_x': 1, | ||||
|             'bottom_y': 2, | ||||
|             'width': 3, | ||||
|             'height': 4, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 2, | ||||
|             'bottom_y': 6, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': None, | ||||
|             'bottom_y': None, | ||||
|             'width': None, | ||||
|             'height': None, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_touch_on_vertical_edge(self): | ||||
|         rect1 = { | ||||
|             'left_x': 1, | ||||
|             'bottom_y': 2, | ||||
|             'width': 3, | ||||
|             'height': 4, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 4, | ||||
|             'bottom_y': 3, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': None, | ||||
|             'bottom_y': None, | ||||
|             'width': None, | ||||
|             'height': None, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_touch_at_a_corner(self): | ||||
|         rect1 = { | ||||
|             'left_x': 1, | ||||
|             'bottom_y': 1, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 3, | ||||
|             'bottom_y': 3, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': None, | ||||
|             'bottom_y': None, | ||||
|             'width': None, | ||||
|             'height': None, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
|     def test_no_overlap(self): | ||||
|         rect1 = { | ||||
|             'left_x': 1, | ||||
|             'bottom_y': 1, | ||||
|             'width': 2, | ||||
|             'height': 2, | ||||
|         } | ||||
|         rect2 = { | ||||
|             'left_x': 4, | ||||
|             'bottom_y': 6, | ||||
|             'width': 3, | ||||
|             'height': 6, | ||||
|         } | ||||
|         expected = { | ||||
|             'left_x': None, | ||||
|             'bottom_y': None, | ||||
|             'width': None, | ||||
|             'height': None, | ||||
|         } | ||||
|         actual = find_rectangular_overlap(rect1, rect2) | ||||
|         self.assertEqual(actual, expected) | ||||
| 
 | ||||
| 
 | ||||
| unittest.main(verbosity=2) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue