예제 #1
0
    def test_ranges(self):
        self.assertEqual(
            Run("…¹¦¹⁰"), """\
-        
--       
---      
----     
-----    
------   
-------  
-------- 
---------""")
        self.assertEqual(Run("…a¦e"), "a\nb\nc\nd")
        self.assertEqual(
            Run("…·¹¦¹⁰"), """\
-         
--        
---       
----      
-----     
------    
-------   
--------  
--------- 
----------""")
        self.assertEqual(Run("…·a¦e"), "a\nb\nc\nd\ne")
예제 #2
0
    def test_oblong(self):
        self.assertEqual(Run("UO⁵¦⁵a"), """\
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa""")
        self.assertEqual(Run("UO±⁵¦±⁵a"), """\
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa""")
        self.assertEqual(
            Run("\
NθNηNζUOθ#M÷⁻θη²↘UOη*M÷⁻ηζ²↘UOζ@", "[12,6,2]"), """\
############
############
############
###******###
###******###
###**@@**###
###**@@**###
###******###
###******###
############
############
############""")
예제 #3
0
    def test_polygon(self):
        self.assertEqual(Run("G+⁵a"), """\
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa""")
        self.assertEqual(Run("G↗↘←⁴*#M↓*"), """\
   #   
  *#*  
 #*#*# 
*#*#*#*
   *   """)
        self.assertEqual(Run("G↗↘←⁴*#¶#*M↓*"), """\
   *   
  *#*  
 *#*#* 
*#*#*#*
   *   """)
        self.assertEqual(
            Run("G↘↗↙↙⁵#"), """\
#########
######## 
#######  
######   
#####    
####     
###      
##       
#        """)
예제 #4
0
    def test_codepage(self):
        self.assertEqual(Run("\xC7+\xB5a\xE0 ", normal_encoding=True), """\
a a a
a a a
a a a
a a a
a a a""")
        self.assertEqual(Run("\xFF\xA4\xEC", normal_encoding=True), "╬")
예제 #5
0
 def test_eval(self):
     self.assertEqual(Run("VS", "abc←←M←abc"), "abc")
     self.assertEqual(Run("↓VS", "⁺⁵¦⁵"), ("|\n" * 10)[:-1])
     self.assertEqual(
         Run("Evaluate(InputString())", "abc←←M←abc", verbose=True), "abc")
     self.assertEqual(
         Run("Print(:Down, Evaluate(InputString()))", "⁺⁵¦⁵", verbose=True),
         ("|\n" * 10)[:-1])
예제 #6
0
    def test_while(self):
        self.assertEqual(Run("A⁵βWβ«abA⁻β¹β»"), "ababababab")
        self.assertEqual(
            Run("""\
Assign(5, b);
while (b) {
    Print('ab');
    Assign(Subtract(b, 1), b);
}""",
                verbose=True), "ababababab")
예제 #7
0
    def test_extend(self):
        self.assertEqual(Run("foobarUE¹"), "f o o b a r")
        self.assertEqual(
            Run("foobar¶baz¶→→quuxUE³¦³"), """\
f   o   o   b   a   r
                     
                     
                     
b   a   z            
                     
                     
                     
    q   u   u   x    """)
예제 #8
0
    def test_escape(self):
        self.assertEqual(Run("G+⁵a´¶´‖"), """\
a¶‖a¶
a¶‖a¶
a¶‖a¶
a¶‖a¶
a¶‖a¶""")
        self.assertEqual(Run("`G+`5a`` `\n`` `;", grave=True), """\
a¶‖a¶
a¶‖a¶
a¶‖a¶
a¶‖a¶
a¶‖a¶""")
예제 #9
0
 def test_reflect(self):
     self.assertEqual(Run("a c¶d¶ghi‖←a"), " c a\n   d\naihg")
     self.assertEqual(Run("a c¶d¶ghi‖→a"), " c a\n   d\naihg")
     self.assertEqual(Run("a c¶d¶ghi‖↑a"), "ghia\nd   \na c ")
     self.assertEqual(Run("a c¶d¶ghi‖↓a"), "ghia\nd   \na c ")
     self.assertEqual(Run("a c¶d¶ghi‖↖a"), "a  \ni c\nh  \ngda")
     self.assertEqual(Run("a c¶d¶ghi‖↗a"), "adg\n  h\nc i\n  a")
     self.assertEqual(Run("a c¶d¶ghi‖↙a"), "adg\n  h\nc i\n  a")
     self.assertEqual(Run("a c¶d¶ghi‖↘a"), "a  \ni c\nh  \ngda")
예제 #10
0
    def test_rectangle(self):
        self.assertEqual(Run("UR⁵¦⁵"), """\
+---+
|   |
|   |
|   |
+---+""")
        self.assertEqual(Run("UR±⁵¦±⁵"), """\
+---+
|   |
|   |
|   |
+---+""")
        self.assertEqual(Run("Rectangle(5, 5)", verbose=True), """\
+---+
|   |
|   |
|   |
+---+""")
예제 #11
0
    def test_whitespace(self):
        self.assertEqual(Run("""\
G
 +
  ⁵
   a´ """, whitespace=True), """\
a a a
a a a
a a a
a a a
a a a""")
예제 #12
0
    def test_rotate_shutter(self):
        self.assertEqual(
            Run("⁴+⟲S²⁴⁶"), """\
    |    
    |    
    |    
    |    
----+----
    |    
    |    
    |    
    |    """)
예제 #13
0
 def test_comparison(self):
     self.assertEqual(Run("⁼¹¦¹"), "-")
     self.assertEqual(Run("‹⁰¦¹"), "-")
     self.assertEqual(Run("›¹¦⁰"), "-")
     self.assertEqual(Run("⁼⁰¦¹"), "")
     self.assertEqual(Run("‹²¦¹"), "")
     self.assertEqual(Run("›¹¦²"), "")
예제 #14
0
 def test_input(self):
     self.assertEqual(Run("WSι", "[\"abc\", 5, \"foobar\"]"), "abc5foobar")
     self.assertEqual(Run("WSι", "abc\n5\nfoobar"), "abc5foobar")
     self.assertEqual(Run("WSι", "abc 5 foobar"), "abc5foobar")
     self.assertEqual(Run("WNι", "[1, 2, \"3\"]"), "------")
     self.assertEqual(Run("WNι", "1\n2\n3"), "------")
     self.assertEqual(Run("WNι", "1 2 3"), "------")
예제 #15
0
    def test_rotate_prism(self):
        self.assertEqual(
            Run("|----⟲P²⁴⁶"), """\
     -    
     |    
     |    
     |    
|----|    
    |----|
    |     
    |     
    |     
    -     """)
예제 #16
0
    def test_jump(self):
        self.assertEqual(Run("aM³¦³a"), """\
a    
     
     
    a""")
        self.assertEqual(Run("abJ³¦³a"), """\
ab  
    
    
   a""")
        self.assertEqual(
            Run("Print(\"a\");Move(3, 3);Print(\"a\");", verbose=True), """\
a    
     
     
    a""")
        self.assertEqual(
            Run("Print(\"ab\");JumpTo(3, 3);Print(\"a\");", verbose=True), """\
ab  
    
    
   a""")
예제 #17
0
 def test_for(self):
     self.assertEqual(Run("F⁵a"), "aaaaa")
     self.assertEqual(Run("FabcιFdefι"), "abcdef")
     self.assertEqual(Run("A⁵ιFSκ", "foobar"), "foobar")
     self.assertEqual(Run("≔i«ικλ»▶i⟦a¦bc¦d⟧"), "abcd")
     self.assertEqual(Run("for(5)Print('a')", verbose=True), "aaaaa")
     self.assertEqual(
         Run("Assign(5,i);for(InputString())Print(k)",
             "foobar",
             verbose=True), "foobar")
예제 #18
0
    def test_copy(self):
        self.assertEqual(
            Run("G+⁵*C³¦³"), """\
*****   
*****   
*****   
********
********
   *****
   *****
   *****""")
        self.assertEqual(
            Run("G→⁵↓⁶*C³¦³"), """\
*****   
    *   
    *   
   *****
    *  *
    *  *
       *
       *
       *""")
        self.assertEqual(Run("***¶  *¶  *C¹¦¹"), """\
*** 
 ***
   *
   *""")
        self.assertEqual(
            Run("Polygon(:+, 5, '*');Copy(3, 3)", verbose=True), """\
*****   
*****   
*****   
********
********
   *****
   *****
   *****""")
        self.assertEqual(
            Run("Polygon(:Right, 5, :Down, 6, '*');Copy(3, 3)", verbose=True),
            """\
*****   
    *   
    *   
   *****
    *  *
    *  *
       *
       *
       *""")
        self.assertEqual(
            Run("Print('***\\n  *\\n  *');Copy(1, 1)", verbose=True), """\
*** 
 ***
   *
   *""")
예제 #19
0
 def test_pivot(self):
     self.assertEqual(Run("↶¹asdf"), "   f\n  d \n s  \na   ")
     self.assertEqual(Run("↶²asdf"), "f\nd\ns\na")
     self.assertEqual(Run("PivotLeft(1);Print('asdf')", verbose=True),
                      "   f\n  d \n s  \na   ")
     self.assertEqual(Run("PivotLeft(2);Print('asdf')", verbose=True),
                      "f\nd\ns\na")
     self.assertEqual(
         Run("PivotLeft(2);Print('asdf\\rghjk')", verbose=True),
         "fk\ndj\nsh\nag")
     self.assertEqual(
         Run("PivotLeft(1);Print('asdf\\rghjk')", verbose=True),
         "   f \n  d k\n s j \na h  \n g   ")
예제 #20
0
    def test_if(self):
        self.assertEqual(Run("¿¹asdf"), "asdf")
        self.assertEqual(Run("¿⁰asdf"), "")
        self.assertEqual(Run("¿⁰«asdf»ghjk"), "ghjk")
        self.assertEqual(Run("if(1)Print('asdf')", verbose=True), "asdf")
        self.assertEqual(Run("if(0)Print('asdf')", verbose=True), "")
        self.assertEqual(
            Run("""\
if (0) {
    Print('asdf')
} //else
    Print('ghjk')""",
                verbose=True), "ghjk")
예제 #21
0
    def test_peek(self):
        # TODO: test manipulation when list methods implemented
        self.assertEqual(Run("barM←×KK⁵"), "barrrrr")
        self.assertEqual(Run("barM←⪫KD³←ω"), "barab")
        self.assertEqual(
            Run("↓foo×⪫KAω⁵"), """\
f              
o              
o              
foofoofoofoofoo""")
        self.assertEqual(Run("baz←M←×⪫KMω⁵"), "bzbzbzbzbzb")
        self.assertEqual(Run("quux←M←×⪫KVω⁵"), "quxuxuxuxuxu")
        self.assertEqual(Run("quux``4`M``4`*``j`K`V`w`5", grave=True),
                         "quxuxuxuxuxu")
예제 #22
0
def ensure(text, strings, expected, limits, validate=trues, inp=""):
    global i
    i += 1
    print("\033[32;1m=== Level %i ===\033[0m" % i)
    print(text % strings[index])
    print("Print:")
    print(expected)
    if inp:
        inputs = literal_eval(inp)
        print("With the input%s:" % ("s" * (len(inputs) > 1)))
        print("\n".join(literal_eval(inp)))
    try:
        while True:
            code = ""
            while not len(code):
                code = input("\033[36;1mCharcoal> \033[0m")
            if len(code) > limits[index]:
                print("Try again. Your code was too long.")
                continue
            if not validate[index](code):
                print("Try again. Please use the syntax given.")
                continue
            result = Run(code, inp, grave=argv.grave, verbose=argv.verbose)
            if result == expected:
                print("Congratulations on passing level %i!" % i)
                return
            if len(result):
                print("Try again. Your output was:")
                print(result)
            else:
                print("""\
Your code gave no output.
Did you make a mistake? Please read the level text \
to make sure you did not miss anything important.""")
    except (KeyboardInterrupt, EOFError):
        print()
        sys.exit()
예제 #23
0
    def test_rotate(self):
        self.assertEqual(Run("abc¶def¶ghi⟲²"), "cfi\nbeh\nadg")
        self.assertEqual(Run("abc¶def¶ghi⟲¹"), """\
  c  
 b f 
a e i
 d h 
  g  """)
        self.assertEqual(Run("abc¶def¶ghi⟲¹a"), """\
  c   
 b f a
a e i 
 d h  
  g   """)
        self.assertEqual(Run("abc¶def¶ghi⟲³a"), """\
 a   
  i  
 f h 
c e g
 b d 
  a  """)
        self.assertEqual(Run("a c¶d¶g⟲²a"), "c  \n  a\nadg")
        self.assertEqual(Run("a c¶d¶g⟲⁶a"), "gda\na  \n  c")
        self.assertEqual(Run("a c¶d¶g⟲⁴a"), " ag\n  d\nc a")
예제 #24
0
    def test_box(self):
        self.assertEqual(Run("B⁵¦⁵*"), """\
*****
*   *
*   *
*   *
*****""")
        self.assertEqual(Run("B⁵¦⁵123"), """\
12312
1   3
3   1
2   2
13213""")
        self.assertEqual(Run("Box(5, 5, '*')", verbose=True), """\
*****
*   *
*   *
*   *
*****""")
        self.assertEqual(Run("Box(5, 5, '123')", verbose=True), """\
12312
1   3
3   1
2   2
13213""")
        self.assertEqual(Run("Box(5.999, 5.999, '123')", verbose=True), """\
12312
1   3
3   1
2   2
13213""")
        self.assertEqual(
            Run("""
Box(Times(2.999, 1.999), 5.999, '123')""", verbose=True), """\
12312
1   3
3   1
2   2
13213""")
예제 #25
0
    In verbose mode, Print() is needed to print a value."""), expected,
                                    (length, length, length + 11)))
                 (expected, len(expected)))(word()), lambda:
    (lambda expected:
     ("A number is %s.",
      ("a run of any character in '⁰¹²³⁴⁵⁶⁷⁸⁹·'", "a run of '`0'-'`9' or '`.'",
       "an ordinary number"), expected, (1, 2, 10)))("-" * randint(5, 9)),
        lambda: (lambda expected: (lambda expected, length: (
            """\
    Another important part of Charcoal is its directional printing.
    Preceding a number with one of the directions %s \
    prints a line with a character selected from '-|/\\' in that direction.""",
            ("'←↑→↓↖↗↘↙'", "'``0'-'``9' according to numpad directions", """
    :Up, :Down, :Left, :Right:UpLeft, :UpRight, :DownLeft and :DownRight"""
             ), expected, (2, 5, 22)))(expected, len(expected)))
    (Run(choice("←↑→↓↖↗↘↙") + choice("⁵⁶⁷⁸⁹"))), lambda:
    (lambda expected: ("""\
A language is never complete without arithmetic.
Charcoal has the basic arithmetic operators %s,
but the cast operator %s is needed to see the result as a number,
and a separator %s is needed to delimit two of the same literal type.%s""", (
        ("'⁺⁻×÷'", "'I'", "'¦'", ""), ("'`+`-`*`/'", "'`I'", "'`:'", ""), ("""
Plus (+), Minus (-), Times (*) and Divide (/)""", "Cast", "',', ';' or ' '",
                                                                           """
In verbose mode, operators are called like functions:
e.g. Plus(1, 'a') or +(1, 'a')""")
    ), expected, (5, 10, 22), (lambda code: code[0] == "I" and code[
        1] in "⁺⁻×÷", lambda code: code[:2] == "`I" and code[
            2:4] in "`+`-`*`/", lambda code: "Cast" in code and any(
                operator in code for operator in
                ["+", "-", "*", "/", "Plus", "Minus", "Times", "Divide"]))))
예제 #26
0
    def test_reflect_overlap(self):
        self.assertEqual(Run("abc¶def¶ghi‖O←"), "cbabc\nfedef\nihghi")
        self.assertEqual(Run("abc¶def¶ghi‖O←a"), " cbabc\n fedef\naihghi")
        self.assertEqual(Run("abc¶def¶ghi‖O→a"), "abcba\ndefed\ngaihg")
        self.assertEqual(Run("abc¶def¶ghi↑‖O↖a"), """\
 a   
ifc  
heb  
gdabc
  def
  ghi""")
        self.assertEqual(Run("abc¶def¶ghi↑‖O↗a"), """\
  adg
  beh
abcfi
defa 
ghi  """)
        self.assertEqual(Run("abc¶def¶ghi↑‖O↙a"), """\
  abc
  def
adghi
beh  
cfi  
 a   """)
        self.assertEqual(Run("abc¶def¶ghi↑‖O↘a"), """\
abc  
defa 
ghifc
  heb
  gda""")
        self.assertEqual(Run("abc¶d¶gh‖O←"), "cbabc\n  d  \n hgh ")
        self.assertEqual(Run("abc¶d¶gh‖O→"), "abcba\nd   d\ngh hg")
        self.assertEqual(Run("abc¶  d¶ gh‖O←"), "cbabc\nd   d\nhg gh")
        self.assertEqual(Run("a c¶d¶ghi‖O↑"), "ghi\nd  \na c\nd  \nghi")
        self.assertEqual(Run("a c¶d¶ghi‖O↓"), "a c\nd  \nghi\nd  \na c")
        self.assertEqual(Run("a c¶d¶ghi¶jkl‖O↓"), """\
a c
d  
ghi
jkl
ghi
d  
a c""")
        self.assertEqual(Run("a¶¶¶¶¶→→→→a‖O↙"), """\
  a   
      
a     
      
      
     a""")
        self.assertEqual(Run("a¶¶¶¶¶←←←←a‖O↘"), """\
   a  
      
     a
      
      
a     """)
        self.assertEqual(Run("a c¶d¶ghi‖O↖"), """\
i c  
h    
gda c
  d  
  ghi""")
        self.assertEqual(Run("a c¶ d¶ghi‖O↖"), """\
i c  
hd   
g a c
   d 
  ghi""")
        self.assertEqual(Run("  a¶ d¶ghi‖O↖"), """\
i a  
hd   
g   a
   d 
  ghi""")
        self.assertEqual(Run("a¶bcd‖O↖"), """\
d   
c   
ba  
 bcd""")
        self.assertEqual(Run("abc¶d‖O↖"), """\
 c  
 b  
dabc
 d  """)
        self.assertEqual(Run("a¶d¶ghi‖O↖"), """\
i    
h    
gda  
  d  
  ghi""")
        self.assertEqual(Run("cdeM↖bM↖a‖O↖"), """\
eba
d b
cde""")
        self.assertEqual(Run("abcM↖d‖O↖"), """\
cd 
b d
abc""")
        self.assertEqual(Run("a¶d¶ghi‖O↗"), """\
adg
d h
ghi""")
        self.assertEqual(Run("a c¶d¶ghi‖O↗"), """\
  adg
    h
a c i
d    
ghi  """)
        self.assertEqual(Run("a c¶ d¶ghi‖O↗"), """\
  a g
   dh
a c i
 d   
ghi  """)
        self.assertEqual(Run("  a¶ d¶ghi‖O↗"), """\
    g
   dh
  a i
 d   
ghi  """)
        self.assertEqual(Run("a¶bcd‖O↗"), """\
 ab
a c
bcd""")
        self.assertEqual(Run("abc¶d‖O↗"), """\
  ad
  b 
abc 
d   """)
        self.assertEqual(Run("a¶d¶ghi‖O↗"), """\
adg
d h
ghi""")
        self.assertEqual(Run("abcM↖d‖O↗"), """\
   a
   b
  dc
abc """)
        self.assertEqual(Run("a c¶d¶ghi‖O↙"), """\
  a c
  d  
adghi
  h  
c i  """)
        self.assertEqual(Run("a c¶ d¶ghi‖O↙"), """\
  a c
   d 
a ghi
 dh  
c i  """)
        self.assertEqual(Run("  a¶ d¶ghi‖O↙"), """\
    a
   d 
  ghi
 dh  
a i  """)
        self.assertEqual(Run("a¶bcd‖O↙"), """\
 a  
abcd
 c  
 d  """)
        self.assertEqual(Run("abc¶d‖O↙"), """\
 abc
ad  
b   
c   """)
        self.assertEqual(Run("a¶d¶ghi‖O↙"), """\
  a  
  d  
adghi
  h  
  i  """)
        self.assertEqual(Run("abcM↖d‖O↙"), """\
   d
 abc
 b  
dc  """)
        self.assertEqual(Run("a c¶d¶ghi‖O↘"), """\
a c  
d    
ghi c
  h  
  gda""")
        self.assertEqual(Run("a c¶ d¶ghi‖O↘"), """\
a c  
 d   
ghi c
  hd 
  g a""")
        self.assertEqual(Run("  a¶ d¶ghi‖O↘"), """\
  a  
 d   
ghi a
  hd 
  g  """)
        self.assertEqual(Run("a¶bcd‖O↘"), """\
a   
bcd 
  c 
  ba""")
        self.assertEqual(Run("abc¶d‖O↘"), """\
abc
d b
 da""")
        self.assertEqual(Run("a¶d¶ghi‖O↘"), """\
a    
d    
ghi  
  h  
  gda""")
        self.assertEqual(Run("a¶d¶ghi‖OO↘²"), """\
a    
d    
ghi  
  gda""")
        self.assertEqual(Run("abcM↖d‖OO↖²"), """\
cdd
abc""")
예제 #27
0
    def test_reflect_copy(self):
        self.assertEqual(Run("abc¶def¶ghi‖C←"), "cbaabc\nfeddef\nihgghi")
        self.assertEqual(Run("abc¶d¶gh‖C←"), "cbaabc\n  dd  \n hggh ")
        self.assertEqual(Run("abc¶d¶gh‖C→"), "abccba\nd    d\ngh  hg")
        self.assertEqual(
            Run("abc¶def¶ghi↑‖C↖a"), """\
 a    
ifc   
heb   
gda   
   abc
   def
   ghi""")
        self.assertEqual(Run("abc¶def¶ghi↑‖C↗a"), """\
   adg
   beh
   cfi
abc a 
def   
ghi   """)
        self.assertEqual(
            Run("abc¶def¶ghi↑‖C↙a"), """\
   abc
   def
   ghi
adg   
beh   
cfi   
 a    """)
        self.assertEqual(Run("abc¶def¶ghi↑‖C↘a"), """\
abc   
def   
ghi a 
   ifc
   heb
   gda""")
        self.assertEqual(Run("abc¶  d¶ gh‖C←"), "cbaabc\nd    d\nhg  gh")
        self.assertEqual(Run("a c¶d¶ghi‖C↑"), "ghi\nd  \na c\na c\nd  \nghi")
        self.assertEqual(Run("a c¶d¶ghi‖C↓"), "a c\nd  \nghi\nghi\nd  \na c")
        self.assertEqual(
            Run("a¶¶¶¶¶→→→→a‖C↙"), """\
   a   
       
       
a      
       
      a
     a """)
        self.assertEqual(
            Run("a¶¶¶¶¶←←←←a‖C↘"), """\
   a   
       
       
      a
       
a      
 a     """)
        self.assertEqual(Run("a c¶d¶ghi‖C↖"), """\
i c   
h     
gda   
   a c
   d  
   ghi""")
        self.assertEqual(Run("a c¶ d¶ghi‖C↖"), """\
i c   
hd    
g a   
   a c
    d 
   ghi""")
        self.assertEqual(Run("  a¶ d¶ghi‖C↖"), """\
i a   
hd    
g     
     a
    d 
   ghi""")
        self.assertEqual(Run("a¶bcd‖C↖"), """\
d    
c    
ba   
  a  
  bcd""")
        self.assertEqual(Run("abc¶d‖C↖"), """\
 c   
 b   
da   
  abc
  d  """)
        self.assertEqual(Run("a¶d¶ghi‖C↖"), """\
i     
h     
gda   
   a  
   d  
   ghi""")
        self.assertEqual(Run("cdeM↖bM↖a‖C↖"), """\
eba 
d  a
c  b
 cde""")
        self.assertEqual(Run("abcM↖d‖C↖"), """\
cd  
b   
a  d
 abc""")
        self.assertEqual(Run("a¶d¶ghi‖C↗"), """\
 adg
a  h
d  i
ghi """)
        self.assertEqual(Run("a c¶d¶ghi‖C↗"), """\
   adg
     h
   c i
a c   
d     
ghi   """)
        self.assertEqual(Run("a c¶ d¶ghi‖C↗"), """\
   a g
    dh
   c i
a c   
 d    
ghi   """)
        self.assertEqual(Run("  a¶ d¶ghi‖C↗"), """\
     g
    dh
   a i
  a   
 d    
ghi   """)
        self.assertEqual(Run("a¶bcd‖C↗"), """\
  ab
   c
a  d
bcd """)
        self.assertEqual(Run("abc¶d‖C↗"), """\
   ad
   b 
   c 
abc  
d    """)
        self.assertEqual(Run("a¶d¶ghi‖C↗"), """\
 adg
a  h
d  i
ghi """)
        self.assertEqual(Run("abcM↖d‖C↗"), """\
    a
    b
   dc
  d  
abc  """)
        self.assertEqual(Run("a c¶d¶ghi‖C↙"), """\
   a c
   d  
   ghi
adg   
  h   
c i   """)
        self.assertEqual(Run("a c¶ d¶ghi‖C↙"), """\
   a c
    d 
   ghi
a g   
 dh   
c i   """)
        self.assertEqual(Run("  a¶ d¶ghi‖C↙"), """\
     a
    d 
   ghi
  g   
 dh   
a i   """)
        self.assertEqual(Run("a¶bcd‖C↙"), """\
  a  
  bcd
ab   
 c   
 d   """)
        self.assertEqual(Run("abc¶d‖C↙"), """\
  abc
  d  
ad   
b    
c    """)
        self.assertEqual(Run("a¶d¶ghi‖C↙"), """\
   a  
   d  
   ghi
adg   
  h   
  i   """)
        self.assertEqual(Run("abcM↖d‖C↙"), """\
    d
  abc
 a   
 b   
dc   """)
        self.assertEqual(Run("a c¶d¶ghi‖C↘"), """\
a c   
d     
ghi   
   i c
   h  
   gda""")
        self.assertEqual(Run("a c¶ d¶ghi‖C↘"), """\
a c   
 d    
ghi   
   i c
   hd 
   g a""")
        self.assertEqual(Run("  a¶ d¶ghi‖C↘"), """\
  a   
 d    
ghi   
   i a
   hd 
   g  """)
        self.assertEqual(Run("a¶bcd‖C↘"), """\
a    
bcd  
   d 
   c 
   ba""")
        self.assertEqual(Run("abc¶d‖C↘"), """\
abc 
d  c
   b
  da""")
        self.assertEqual(Run("a¶d¶ghi‖C↘"), """\
a     
d     
ghi   
   i  
   h  
   gda""")
        self.assertEqual(
            Run("↗⁶‖C↓a"), """\
     / 
    /  
   /   
  /    
 /     
/      
/      
 /     
  /    
   /   
    /  
     / 
      a""")
        self.assertEqual(
            Run("↘⁶‖C↑a"), """\
      a
     \\ 
    \\  
   \\   
  \\    
 \\     
\\      
\\      
 \\     
  \\    
   \\   
    \\  
     \\ """)
        self.assertEqual(
            Run("↗²↖↙⁴‖Ca"), """\
   //    
  /  /   
 / // /  
/ /  / / 
        a""")
        self.assertEqual(Run("↗²↖↙⁴‖C←a"), """\
/      /
 /    / 
/ /  / /
 / // / 
    a   """)
예제 #28
0
    def test_rotate_overlap(self):
        self.assertEqual(Run("abc¶de⟲O²"), """\
abc
de 
 be
 ad""")
        self.assertEqual(Run("abc¶de⟲O⁴"), """\
abc  
de ed
  cba""")
        self.assertEqual(Run("abc¶de⟲O⁶"), """\
  da
abcb
de c""")
        self.assertEqual(Run("abc↙M←de⟲O↙²"), """\
ce  
babc
a de""")
        self.assertEqual(Run("abc↙M←de⟲O↙⁴"), """\
  abc
ed de
cba  """)
        self.assertEqual(Run("abc↙M←de⟲O↙⁶"), """\
abc
 de
db 
ec """)
        self.assertEqual(Run("abc↖M←de⟲O↖²"), """\
ec 
db 
 de
abc""")
        self.assertEqual(Run("abc↖M←de⟲O↖⁴"), """\
cba  
ed de
  abc""")
        self.assertEqual(Run("abc↖M←de⟲O↖⁶"), """\
a de
babc
ce  """)
        self.assertEqual(Run("de¶abc⟲O↗²"), """\
de c
abcb
  da""")
        self.assertEqual(Run("de¶abc⟲O↗⁴"), """\
  cba
de ed
abc  """)
        self.assertEqual(Run("de¶abc⟲O↗⁶"), """\
 ad
 be
de 
abc""")
        self.assertEqual(
            Run("Print('abc\\nde');RotateOverlap(2)", verbose=True), """\
abc
de 
 be
 ad""")
        self.assertEqual(
            Run("Print('abc\\nde');RotateOverlap(4)", verbose=True), """\
abc  
de ed
  cba""")
        self.assertEqual(
            Run("Print('abc\\nde');RotateOverlap(6)", verbose=True), """\
  da
abcb
de c""")
        self.assertEqual(
            Run("""
Print('abc');
Move(:DownLeft);
Move(:Left);
Print('de');
RotateOverlap(:DownLeft, 2)""",
                verbose=True), """\
ce  
babc
a de""")
        self.assertEqual(
            Run("""
Print('abc');
Move(:DownLeft);
Move(:Left);
Print('de');
RotateOverlap(:DownLeft, 4)""",
                verbose=True), """\
  abc
ed de
cba  """)
        self.assertEqual(
            Run("""
Print('abc');
Move(:DownLeft);
Move(:Left);
Print('de');
RotateOverlap(:DownLeft, 6)""",
                verbose=True), """\
abc
 de
db 
ec """)
        self.assertEqual(
            Run("abcM↓def⟲C↖²⁴⁶"), """\
       f    
       e    
       d    
      c     
fed   b     
   cbaa     
     aabc   
     b   def
     c      
    d       
    e       
    f       """)
        self.assertEqual(
            Run("abcM↓def⟲O↖²⁴⁶"), """\
      f    
      e    
      d    
     c     
fed  b     
   cbabc   
     b  def
     c     
    d      
    e      
    f      """)
예제 #29
0
    def test_multiprint(self):
        self.assertEqual(Run("Pabc"), "abc")
        self.assertEqual(Run("P→abc"), "abc")
        self.assertEqual(Run("P↓abc"), "a\nb\nc")
        self.assertEqual(Run("P←abc"), "cba")
        self.assertEqual(Run("P↑abc"), "c\nb\na")
        self.assertEqual(Run("P→↓abc"), "abc\nb  \nc  ")
        self.assertEqual(Run("P+abc"), "  c  \n  b  \ncbabc\n  b  \n  c  ")
        self.assertEqual(
            Run("PK¦*****"), """\
*   *
*  * 
* *  
**   
*    
**   
* *  
*  * 
*   *""")
        self.assertEqual(Run("Multiprint('abc')", verbose=True), "abc")
        self.assertEqual(Run("Multiprint(:Right, 'abc')", verbose=True), "abc")
        self.assertEqual(Run("Multiprint(:Down, 'abc')", verbose=True),
                         "a\nb\nc")
        self.assertEqual(Run("Multiprint(:Left, 'abc')", verbose=True), "cba")
        self.assertEqual(Run("Multiprint(:Up, 'abc')", verbose=True),
                         "c\nb\na")
        self.assertEqual(Run("Multiprint(:Right, :Down, 'abc')", verbose=True),
                         "abc\nb  \nc  ")
        self.assertEqual(Run("Multiprint(:+, 'abc')", verbose=True),
                         "  c  \n  b  \ncbabc\n  b  \n  c  ")
예제 #30
0
    def test_rotate_copy(self):
        self.assertEqual(Run("abc¶de⟲C²"), """\
abc
de 
 c 
 be
 ad""")
        self.assertEqual(Run("abc¶de⟲C⁴"), """\
abc   
de    
    ed
   cba""")
        self.assertEqual(Run("abc¶de⟲C⁶"), """\
   da
abceb
de  c""")
        self.assertEqual(Run("abc↙M←de⟲C↙²"), """\
ce   
bdabc
a  de""")
        self.assertEqual(Run("abc↙M←de⟲C↙⁴"), """\
   abc
    de
ed    
cba   """)
        self.assertEqual(Run("abc↙M←de⟲C↙⁶"), """\
abc
 de
 a 
db 
ec """)
        self.assertEqual(Run("abc↖M←de⟲C↖²"), """\
ec 
db 
 a 
 de
abc""")
        self.assertEqual(Run("abc↖M←de⟲C↖⁴"), """\
cba   
ed    
    de
   abc""")
        self.assertEqual(Run("abc↖M←de⟲C↖⁶"), """\
a  de
bdabc
ce   """)
        self.assertEqual(Run("de¶abc⟲C↗²"), """\
de  c
abceb
   da""")
        self.assertEqual(Run("de¶abc⟲C↗⁴"), """\
   cba
    ed
de    
abc   """)
        self.assertEqual(Run("de¶abc⟲C↗⁶"), """\
 ad
 be
 c 
de 
abc""")
        self.assertEqual(Run("Print('abc\\nde');RotateCopy(2)", verbose=True),
                         """\
abc
de 
 c 
 be
 ad""")
        self.assertEqual(Run("Print('abc\\nde');RotateCopy(4)", verbose=True),
                         """\
abc   
de    
    ed
   cba""")
        self.assertEqual(Run("Print('abc\\nde');RotateCopy(6)", verbose=True),
                         """\
   da
abceb
de  c""")
        self.assertEqual(
            Run("""
Print('abc');
Move(:DownLeft);
Move(:Left);
Print('de');
RotateCopy(:DownLeft, 2)""",
                verbose=True), """\
ce   
bdabc
a  de""")
        self.assertEqual(
            Run("""
Print('abc');
Move(:DownLeft);
Move(:Left);
Print('de');
RotateCopy(:DownLeft, 4)""",
                verbose=True), """\
   abc
    de
ed    
cba   """)
        self.assertEqual(
            Run("""
Print('abc');
Move(:DownLeft);
Move(:Left);
Print('de');
RotateCopy(:DownLeft, 6)""",
                verbose=True), """\
abc
 de
 a 
db 
ec """)