from org.transcrypt.stubs.browser import __pragma__

__pragma__ ('tconv')

def run (autoTester):
    autoTester.check (len ({1:2}))

    autoTester.check ('Select nonemtpy container, if any<br>')

    autoTester.check ((0) or (1, 2, 3))
    autoTester.check (() or (1, 2, 3))
    autoTester.check (() or ())
    
    autoTester.check ((-1) or (0) or (1, 2, 3))
    autoTester.check (() or (0) or (1, 2, 3))
    autoTester.check (() or () or (1, 2, 3))
    autoTester.check (() or () or ())
    
    autoTester.check ([0] or [1, 2, 3])
    autoTester.check ([] or [1, 2, 3])
    autoTester.check ([] or [])
    
    autoTester.check ([-1] or [0] or [1, 2, 3])
    autoTester.check ([] or [0] or [1, 2, 3])
    autoTester.check ([] or [] or [1, 2, 3])
    autoTester.check ([] or [] or [])
    
    autoTester.check ({0} or {1, 2, 3, 4})
    autoTester.check (set () or {1, 2, 3, 4})
    autoTester.check (set () or set ())
    
    autoTester.check ({-1} or {0} or {1, 2, 3, 5})
    autoTester.check (set () or {0} or {1, 2, 3, 6})
    autoTester.check (set () or set () or {1, 2, 3, 7})
    autoTester.check (set () or set () or set ())
    
    autoTester.check ({0:10} or {1:11, 2:12, 3:13})
    autoTester.check ({} or {1, 2, 3, 8})
    autoTester.check ({} or {})
    
    autoTester.check ({-1:-11} or {0:10} or {1:11, 2:12, 3:13})
    autoTester.check ({} or {0:10} or {1:11, 2:12, 3:13})
    autoTester.check ({} or {} or {1:11, 2:12, 3:13})
    autoTester.check ({} or {} or {})
    
    autoTester.check ('<br><br>')
    autoTester.check ('Boolean evaluations')
    for expression in (
        '<br> -- falsy -- <br>',
        (),
        [],
        set (),
        {},
        0,
        '',
        3 > 5,
        False,
        '<br> -- truthy -- <br>',
        (1, 2, 3),
        [1, 2, 3],
        {1, 2, 3},
        {'a': 1, 'b': 2, 'c': 3},
        3,
        'hello',
        5 > 3,
        True
    ):
        if expression in ('<br> -- falsy -- <br>', '<br> -- truthy -- <br>'):
            autoTester.check (expression)
        else:
            autoTester.check (expression, ' . . . ')
            autoTester.check ('operators')
            autoTester.check (not not expression)
            autoTester.check (not not (True and expression))
            autoTester.check (not not (False or expression))
            autoTester.check (not not (expression and True))
            autoTester.check (not not (expression and False))
            
            autoTester.check ('if')
            if expression:
                autoTester.check (True)
            else:
                autoTester.check (False)
                
            if expression or expression:
                autoTester.check (True)
            else:
                autoTester.check (False)
                
            if False:
                autoTester.check ('if')
            elif expression:
                autoTester.check ('elif')
            else:
                autoTester.check ('else')
                
            autoTester.check ('while')
            while expression:
                autoTester.check (True)
                break
                
            autoTester.check ('condex')
            autoTester.check (True if expression else False)
            
    if (0.0):
        autoTester.check ('0.0')
    elif (0.1):
        autoTester.check ('0.1')
    else:
        autoTester.check ('Shouldn\'t be here...')
        
    class A:
        pass
        
    autoTester.check (not not A ())
    