class Test(unittest.TestCase):

    def setUp(self):
        self.decoration = Decoration()

    def tearDown(self):
        self.decoration = None

    def test_default_decoration(self):
        self.assertEquals(0,
                          self.decoration.sum_up_lights_on())

    def test_one_toggle(self):
        self.decoration.toggle_light(0, 0)
        self.assertEquals(1,
                          self.decoration.sum_up_lights_on())
        self.decoration.turn_off_light(0, 0)
        self.assertEquals(0,
                          self.decoration.sum_up_lights_on())
        self.decoration.turn_on_light(0, 0)
        self.assertEquals(1,
                          self.decoration.sum_up_lights_on())

    def test_one_rectangle_full(self):
        self.decoration.toggle_rect(0, 0, 9, 9)
        self.assertEquals(100,
                          self.decoration.sum_up_lights_on())
        self.decoration.turn_off_rect(0, 0, 9, 9)
        self.assertEquals(0,
                          self.decoration.sum_up_lights_on())
        self.decoration.turn_on_rect(0, 0, 9, 9)
        self.assertEquals(100,
                          self.decoration.sum_up_lights_on())
        self.decoration.toggle_rect(0, 0, 1, 1)
        self.assertEquals(96,
                          self.decoration.sum_up_lights_on())

    def test_input(self):
        self.decoration.process_instruction("turn on 0,0 through 1,1")
        self.assertEquals(
            4, self.decoration.sum_up_lights_on())
        self.decoration.process_instruction("turn off 0,0 through 1,1")
        self.assertEquals(
            0, self.decoration.sum_up_lights_on())
        self.decoration.process_instruction("toggle 0,0 through 1,1")
        self.assertEquals(
            4, self.decoration.sum_up_lights_on())

    def test_multiple_inputs(self):
        self.assertEquals(4,
                          self.decoration.process_multiple_instructions("""turn on 0,0 through 1,1
        turn off 0,0 through 1,1
        toggle 0,0 through 1,1"""))

    def test_multiple_answer(self):
        self.assertEquals(543903,
                          self.decoration.process_multiple_instructions("""toggle 461,550 through 564,900
            turn off 370,39 through 425,839
            turn off 464,858 through 833,915
            turn off 812,389 through 865,874
            turn on 599,989 through 806,993
            turn on 376,415 through 768,548
            turn on 606,361 through 892,600
            turn off 448,208 through 645,684
            toggle 50,472 through 452,788
            toggle 205,417 through 703,826
            toggle 533,331 through 906,873
            toggle 857,493 through 989,970
            turn off 631,950 through 894,975
            turn off 387,19 through 720,700
            turn off 511,843 through 581,945
            toggle 514,557 through 662,883
            turn off 269,809 through 876,847
            turn off 149,517 through 716,777
            turn off 994,939 through 998,988
            toggle 467,662 through 555,957
            turn on 952,417 through 954,845
            turn on 565,226 through 944,880
            turn on 214,319 through 805,722
            toggle 532,276 through 636,847
            toggle 619,80 through 689,507
            turn on 390,706 through 884,722
            toggle 17,634 through 537,766
            toggle 706,440 through 834,441
            toggle 318,207 through 499,530
            toggle 698,185 through 830,343
            toggle 566,679 through 744,716
            toggle 347,482 through 959,482
            toggle 39,799 through 981,872
            turn on 583,543 through 846,710
            turn off 367,664 through 595,872
            turn on 805,439 through 964,995
            toggle 209,584 through 513,802
            turn off 106,497 through 266,770
            turn on 975,2 through 984,623
            turn off 316,684 through 369,876
            turn off 30,309 through 259,554
            turn off 399,680 through 861,942
            toggle 227,740 through 850,829
            turn on 386,603 through 552,879
            turn off 703,795 through 791,963
            turn off 573,803 through 996,878
            turn off 993,939 through 997,951
            turn on 809,221 through 869,723
            turn off 38,720 through 682,751
            turn off 318,732 through 720,976
            toggle 88,459 through 392,654
            turn off 865,654 through 911,956
            toggle 264,284 through 857,956
            turn off 281,776 through 610,797
            toggle 492,660 through 647,910
            turn off 879,703 through 925,981
            turn off 772,414 through 974,518
            turn on 694,41 through 755,96
            turn on 452,406 through 885,881
            turn off 107,905 through 497,910
            turn off 647,222 through 910,532
            turn on 679,40 through 845,358
            turn off 144,205 through 556,362
            turn on 871,804 through 962,878
            turn on 545,676 through 545,929
            turn off 316,716 through 413,941
            toggle 488,826 through 755,971
            toggle 957,832 through 976,992
            toggle 857,770 through 905,964
            toggle 319,198 through 787,673
            turn on 832,813 through 863,844
            turn on 818,296 through 818,681
            turn on 71,699 through 91,960
            turn off 838,578 through 967,928
            toggle 440,856 through 507,942
            toggle 121,970 through 151,974
            toggle 391,192 through 659,751
            turn on 78,210 through 681,419
            turn on 324,591 through 593,939
            toggle 159,366 through 249,760
            turn off 617,167 through 954,601
            toggle 484,607 through 733,657
            turn on 587,96 through 888,819
            turn off 680,984 through 941,991
            turn on 800,512 through 968,691
            turn off 123,588 through 853,603
            turn on 1,862 through 507,912
            turn on 699,839 through 973,878
            turn off 848,89 through 887,893
            toggle 344,353 through 462,403
            turn on 780,731 through 841,760
            toggle 693,973 through 847,984
            toggle 989,936 through 996,958
            toggle 168,475 through 206,963
            turn on 742,683 through 769,845
            toggle 768,116 through 987,396
            turn on 190,364 through 617,526
            turn off 470,266 through 530,839
            toggle 122,497 through 969,645
            turn off 492,432 through 827,790
            turn on 505,636 through 957,820
            turn on 295,476 through 698,958
            toggle 63,298 through 202,396
            turn on 157,315 through 412,939
            turn off 69,789 through 134,837
            turn off 678,335 through 896,541
            toggle 140,516 through 842,668
            turn off 697,585 through 712,668
            toggle 507,832 through 578,949
            turn on 678,279 through 886,621
            toggle 449,744 through 826,910
            turn off 835,354 through 921,741
            toggle 924,878 through 985,952
            turn on 666,503 through 922,905
            turn on 947,453 through 961,587
            toggle 525,190 through 795,654
            turn off 62,320 through 896,362
            turn on 21,458 through 972,536
            turn on 446,429 through 821,970
            toggle 376,423 through 805,455
            toggle 494,896 through 715,937
            turn on 583,270 through 667,482
            turn off 183,468 through 280,548
            toggle 623,289 through 750,524
            turn on 836,706 through 967,768
            turn on 419,569 through 912,908
            turn on 428,260 through 660,433
            turn off 683,627 through 916,816
            turn on 447,973 through 866,980
            turn on 688,607 through 938,990
            turn on 245,187 through 597,405
            turn off 558,843 through 841,942
            turn off 325,666 through 713,834
            toggle 672,606 through 814,935
            turn off 161,812 through 490,954
            turn on 950,362 through 985,898
            turn on 143,22 through 205,821
            turn on 89,762 through 607,790
            toggle 234,245 through 827,303
            turn on 65,599 through 764,997
            turn on 232,466 through 965,695
            turn on 739,122 through 975,590
            turn off 206,112 through 940,558
            toggle 690,365 through 988,552
            turn on 907,438 through 977,691
            turn off 838,809 through 944,869
            turn on 222,12 through 541,832
            toggle 337,66 through 669,812
            turn on 732,821 through 897,912
            toggle 182,862 through 638,996
            turn on 955,808 through 983,847
            toggle 346,227 through 841,696
            turn on 983,270 through 989,756
            turn off 874,849 through 876,905
            turn off 7,760 through 678,795
            toggle 973,977 through 995,983
            turn off 911,961 through 914,976
            turn on 913,557 through 952,722
            turn off 607,933 through 939,999
            turn on 226,604 through 517,622
            turn off 3,564 through 344,842
            toggle 340,578 through 428,610
            turn on 248,916 through 687,925
            toggle 650,185 through 955,965
            toggle 831,359 through 933,536
            turn off 544,614 through 896,953
            toggle 648,939 through 975,997
            turn on 464,269 through 710,521
            turn off 643,149 through 791,320
            turn off 875,549 through 972,643
            turn off 953,969 through 971,972
            turn off 236,474 through 772,591
            toggle 313,212 through 489,723
            toggle 896,829 through 897,837
            toggle 544,449 through 995,905
            turn off 278,645 through 977,876
            turn off 887,947 through 946,977
            turn on 342,861 through 725,935
            turn on 636,316 through 692,513
            toggle 857,470 through 950,528
            turn off 736,196 through 826,889
            turn on 17,878 through 850,987
            turn on 142,968 through 169,987
            turn on 46,470 through 912,853
            turn on 182,252 through 279,941
            toggle 261,143 through 969,657
            turn off 69,600 through 518,710
            turn on 372,379 through 779,386
            toggle 867,391 through 911,601
            turn off 174,287 through 900,536
            toggle 951,842 through 993,963
            turn off 626,733 through 985,827
            toggle 622,70 through 666,291
            turn off 980,671 through 985,835
            turn off 477,63 through 910,72
            turn off 779,39 through 940,142
            turn on 986,570 through 997,638
            toggle 842,805 through 943,985
            turn off 890,886 through 976,927
            turn off 893,172 through 897,619
            turn off 198,780 through 835,826
            toggle 202,209 through 219,291
            turn off 193,52 through 833,283
            toggle 414,427 through 987,972
            turn on 375,231 through 668,236
            turn off 646,598 through 869,663
            toggle 271,462 through 414,650
            turn off 679,121 through 845,467
            toggle 76,847 through 504,904
            turn off 15,617 through 509,810
            toggle 248,105 through 312,451
            turn off 126,546 through 922,879
            turn on 531,831 through 903,872
            toggle 602,431 through 892,792
            turn off 795,223 through 892,623
            toggle 167,721 through 533,929
            toggle 813,251 through 998,484
            toggle 64,640 through 752,942
            turn on 155,955 through 892,985
            turn on 251,329 through 996,497
            turn off 341,716 through 462,994
            toggle 760,127 through 829,189
            turn on 86,413 through 408,518
            toggle 340,102 through 918,558
            turn off 441,642 through 751,889
            turn on 785,292 through 845,325
            turn off 123,389 through 725,828
            turn on 905,73 through 983,270
            turn off 807,86 through 879,276
            toggle 500,866 through 864,916
            turn on 809,366 through 828,534
            toggle 219,356 through 720,617
            turn off 320,964 through 769,990
            turn off 903,167 through 936,631
            toggle 300,137 through 333,693
            toggle 5,675 through 755,848
            turn off 852,235 through 946,783
            toggle 355,556 through 941,664
            turn on 810,830 through 867,891
            turn off 509,869 through 667,903
            toggle 769,400 through 873,892
            turn on 553,614 through 810,729
            turn on 179,873 through 589,962
            turn off 466,866 through 768,926
            toggle 143,943 through 465,984
            toggle 182,380 through 569,552
            turn off 735,808 through 917,910
            turn on 731,802 through 910,847
            turn off 522,74 through 731,485
            turn on 444,127 through 566,996
            turn off 232,962 through 893,979
            turn off 231,492 through 790,976
            turn on 874,567 through 943,684
            toggle 911,840 through 990,932
            toggle 547,895 through 667,935
            turn off 93,294 through 648,636
            turn off 190,902 through 532,970
            turn off 451,530 through 704,613
            toggle 936,774 through 937,775
            turn off 116,843 through 533,934
            turn on 950,906 through 986,993
            turn on 910,51 through 945,989
            turn on 986,498 through 994,945
            turn off 125,324 through 433,704
            turn off 60,313 through 75,728
            turn on 899,494 through 940,947
            toggle 832,316 through 971,817
            toggle 994,983 through 998,984
            toggle 23,353 through 917,845
            toggle 174,799 through 658,859
            turn off 490,878 through 534,887
            turn off 623,963 through 917,975
            toggle 721,333 through 816,975
            toggle 589,687 through 890,921
            turn on 936,388 through 948,560
            turn off 485,17 through 655,610
            turn on 435,158 through 689,495
            turn on 192,934 through 734,936
            turn off 299,723 through 622,847
            toggle 484,160 through 812,942
            turn off 245,754 through 818,851
            turn on 298,419 through 824,634
            toggle 868,687 through 969,760
            toggle 131,250 through 685,426
            turn off 201,954 through 997,983
            turn on 353,910 through 832,961
            turn off 518,781 through 645,875
            turn off 866,97 through 924,784
            toggle 836,599 through 857,767
            turn on 80,957 through 776,968
            toggle 277,130 through 513,244
            turn off 62,266 through 854,434
            turn on 792,764 through 872,842
            turn off 160,949 through 273,989
            turn off 664,203 through 694,754
            toggle 491,615 through 998,836
            turn off 210,146 through 221,482
            turn off 209,780 through 572,894
            turn on 766,112 through 792,868
            turn on 222,12 through 856,241"""))
 def setUp(self):
     self.decoration = Decoration()