コード例 #1
0
 def test_na(self):
     t1 = compile('''
     | A | B |
     |---|---|
     | 1 |N/A|
     | 2 | 1 |
     |N/A| 2 |
     | * | 3 |''')
     t2 = compile('''
     | A | C |
     |---|---|
     | 1 | 3 |
     | 2 |N/A|
     |N/A| 4 |
     | * | 5 |''')
     t3 = t1 * t2
     self.assertEqual(t3._labels, ('A', 'B', 'C'))
     self.assertEqual(t3._num_rows, 10)
     self.assertEqual(t3.rows[0], (1, NOT_APPLICABLE, 3))
     self.assertEqual(t3.rows[1], (1, NOT_APPLICABLE, 5))
     self.assertEqual(t3.rows[2], (2, 1, NOT_APPLICABLE))
     self.assertEqual(t3.rows[3], (2, 1, 5))
     self.assertEqual(t3.rows[4], (NOT_APPLICABLE, 2, 4))
     self.assertEqual(t3.rows[5], (NOT_APPLICABLE, 2, 5))
     self.assertEqual(t3.rows[6], (1, 3, 3))
     self.assertEqual(t3.rows[7], (2, 3, NOT_APPLICABLE))
     self.assertEqual(t3.rows[8], (NOT_APPLICABLE, 3, 4))
     self.assertEqual(t3.rows[9], (WILD_CARD, 3, 5))
コード例 #2
0
 def test_collection_both(self):
     t1 = compile('''
     | A (coll) | B |
     |----------|---|
     | 1, 2, 3  | 0 |''')
     t2 = compile('''
     | A (coll) | C |
     |----------|---|
     | 2, 3, 4  | 1 |''')
     t3 = t1 * t2
     self.assertFalse((1, 0, 1) in t3)
     self.assertTrue((2, 0, 1) in t3)
     self.assertTrue((3, 0, 1) in t3)
     self.assertFalse((4, 0, 1) in t3)
コード例 #3
0
 def test_condition_both(self):
     t1 = compile('''
     | A (cond) | B |
     |----------|---|
     | A > 0    | 0 |
     | *        | 1 |''')
     t2 = compile('''
     | A (cond) | C |
     |----------|---|
     | A < 2    | 0 |
     | *        | 1 |''')
     t3 = t1 * t2
     self.assertEqual(t3.select(A=-1), (-1, 1, 0))
     self.assertEqual(t3.select(A=1), (1, 0, 0))
     self.assertEqual(t3.select(A=3), (3, 0, 1))
コード例 #4
0
 def test_invalid_directive(self):
     self.assertRaises(
         TableMarkupError, lambda: compile('''
             | A (foo) |
             |---------|
             | a       |
             '''))
コード例 #5
0
 def test_markdown2(self):
     t = compile('''
       A | B | C | D
      ---|---|---|---
       1 | 2 | 3 | 4
     ''')
     self.assertEqual(t.select(A=1), (1, 2, 3, 4))
コード例 #6
0
 def test_markdown1(self):
     t = compile('''
     | A | B | C | D |
     |---|---|---|---|
     | 1 | 2 | 3 | 4 |
     ''')
     self.assertEqual(t.select(A=1), (1, 2, 3, 4))
コード例 #7
0
 def test_plus_operator(self):
     t1 = compile('''
         | A | B |
         |---|---|
         | 1 | 2 |
         | 2 | 4 |''')
     t2 = compile('''
         | A | B |
         |---|---|
         | 3 | 6 |
         | 4 | 8 |''')
     t3 = t1 + t2
     it = iter(t3)
     self.assertEqual(next(it), (1, 2))
     self.assertEqual(next(it), (2, 4))
     self.assertEqual(next(it), (3, 6))
     self.assertEqual(next(it), (4, 8))
コード例 #8
0
 def test_condition_right(self):
     t1 = compile('''
     | A  | B |
     |----|---|
     | -1 | 1 |
     |  1 | 2 |''')
     t2 = compile('''
     | A(cond) | C |
     |---------|---|
     | A < 0   | 1 |
     | A >= 0  | 2 |''')
     t3 = t1 * t2
     self.assertEqual(t3._labels, ('A', 'B', 'C'))
     self.assertEqual(t3._num_rows, 2)
     it = iter(t3)
     self.assertEqual(next(it), (-1, 1, 1))
     self.assertEqual(next(it), (1, 2, 2))
コード例 #9
0
 def test_oneline(self):
     tb = compile('''
         ==========
          a (value)
         ==========
          1
         ==========''')
     self.assertEqual(tb.select(a=1), (1, ))
コード例 #10
0
 def test_union(self):
     t1 = compile('''
         | A | B |
         |---|---|
         | 1 | 2 |
         | 2 | 4 |''')
     t2 = compile('''
         | A | B |
         |---|---|
         | 3 | 6 |
         | 4 | 8 |''')
     t3 = t1.union(t2)
     it = iter(t3)
     self.assertEqual(next(it), (1, 2))
     self.assertEqual(next(it), (2, 4))
     self.assertEqual(next(it), (3, 6))
     self.assertEqual(next(it), (4, 8))
コード例 #11
0
 def test_grid_table(self):
     tb = compile('''
     +---+---+
     | a | b |
     +===+===+
     | 1 | a |
     +---+---+''',
                  a=1)
     self.assertEqual(tb.select(a=1, b=1), (1, 1))
コード例 #12
0
 def test_variable_leak2(self):
     self.assertRaises(
         NameError, lambda: compile("""
             =====
              A
             =====
             table
             =====
             """))
コード例 #13
0
 def test_operator(self):
     tb = compile("""
     === === ========
      a   b   aplusb
     === === ========
      1   1   1 + 1
     === === ========
     """)
     self.assertEqual(tb.select(a=1, b=1).aplusb, 2)
コード例 #14
0
 def test_join_two_col(self):
     t1 = compile('''
     | A | B | C |
     |---|---|---|
     | 1 | 2 | 1 |
     | 1 | 1 | 2 |''')
     t2 = compile('''
     | A | B | D |
     |---|---|---|
     | 1 | 1 | 3 |
     | 1 | 1 | 4 |
     | 2 | 1 | 4 |''')
     t3 = t1 * t2
     self.assertEqual(t3._labels, ('A', 'B', 'C', 'D'))
     it = iter(t3)
     self.assertEqual(next(it), (1, 1, 2, 3))
     self.assertEqual(next(it), (1, 1, 2, 4))
     assertIterationStop(it)
コード例 #15
0
 def test_no_arg(self):
     tb = compile("""
     === ===
      A   B
     === ===
      1   1
     === ===
     """)
     self.assertRaises(LookupError, tb.select)
コード例 #16
0
 def test_no_matched(self):
     tb = compile("""
     === ===
      A   B
     === ===
      1   1
     === ===
     """)
     self.assertEqual(tb.select_all(A=2), [])
コード例 #17
0
 def test_na(self):
     tb = compile("""
     === ===
      A   B
     === ===
      1  N/A
     === ===
     """)
     self.assertRaises(LookupError, lambda: tb.select(A=1))
コード例 #18
0
 def test_builtin(self):
     tb = compile("""
     ======
       A
     ======
     str(1)
     ======
     """)
     self.assertEqual(tb.select(A='1'), ('1', ))
コード例 #19
0
 def test_collection(self):
     tb = compile('''
     | S(coll) | V |
     |---------|---|
     | 1, 2    | 1 |
     | N/A     | 2 |
     |  *      | 3 |''')
     self.assertEqual(tb.select(S=1), (1, 1))
     self.assertEqual(tb.select(S=2), (2, 1))
     self.assertEqual(tb.select(S=3), (3, 3))
コード例 #20
0
 def test_na_for_key(self):
     tb = compile("""
     === ===
      A   B
     === ===
     N/A  1
      1   2
     === ===
     """)
     self.assertEqual(tb.select(A=1), (1, 2))
コード例 #21
0
 def test_string(self):
     tb = compile('''
         ======== =====
         A        B
         (string) (str)
         ======== =====
         AAAAAAAA BBBBB
         aaaaaaaa bbbbb
         ======== =====''')
     self.assertEqual(tb.select(A='AAAAAAAA'), ('AAAAAAAA', 'BBBBB'))
コード例 #22
0
 def test_condition_right(self):
     tb = compile('''
         ===== ===========
          a     b
               (condition)
         ===== ===========
         True   b < 0
         False  b >= 0
         ===== ===========''')
     self.assertEqual(tb.select(b=-1), (True, -1))
     self.assertEqual(tb.select(b=1), (False, 1))
コード例 #23
0
 def test_consition_wildcard(self):
     tb = compile('''
         =========== =====
          a           b
         (condition)
         =========== =====
         a < 0       True
         *           False
         =========== =====''')
     self.assertEqual(tb.select(a=-1), (-1, True))
     self.assertEqual(tb.select(a=1), (1, False))
コード例 #24
0
 def test_consition_na(self):
     tb = compile('''
         =========== =====
          a           b
         (condition)
         =========== =====
         N/A         True
         0 <= a      False
         =========== =====''')
     self.assertRaises(LookupError, lambda: tb.select(a=-1))
     self.assertEqual(tb.select(a=1), (1, False))
コード例 #25
0
 def test_value(self):
     tb = compile('''
         =========
          a
         (value)
         =========
          1
          2
         =========''')
     self.assertEqual(tb.select(a=1), (1, ))
     self.assertEqual(tb.select(a=2), (2, ))
コード例 #26
0
 def test_wildcard_left(self):
     t1 = compile('''
     | A | B |
     |---|---|
     | 1 | 1 |
     | 2 | 2 |
     | * | 3 |''')
     t2 = compile('''
     | A | C |
     |---|---|
     | 1 | 1 |
     | 2 | 2 |''')
     t3 = t1 * t2
     self.assertEqual(t3._labels, ('A', 'B', 'C'))
     self.assertEqual(t3._num_rows, 4)
     it = iter(t3)
     self.assertEqual(next(it), (1, 1, 1))
     self.assertEqual(next(it), (2, 2, 2))
     self.assertEqual(next(it), (1, 3, 1))
     self.assertEqual(next(it), (2, 3, 2))
     assertIterationStop(it)
コード例 #27
0
 def test_cond(self):
     tb = compile('''
         ====== ===
           A     B
         (cond)
         ====== ===
         A == 1  1
         A == 2  2
         ====== ===''')
     self.assertEqual(tb.select(A=1), (1, 1))
     self.assertEqual(tb.select(A=2), (2, 2))
     self.assertRaises(LookupError, lambda: tb.select(A=-1))
コード例 #28
0
 def test_no_arg(self):
     tb = compile("""
     === ===
      A   B
     === ===
      1   1
      1   2
     === ===
     """)
     ret = tb.select_all()
     self.assertEqual(len(ret), 2)
     self.assertEqual(ret[0], (1, 1))
     self.assertEqual(ret[1], (1, 2))
コード例 #29
0
    def test_wildcard(self):
        tb = compile("""
        === ===
         A   B
        === ===
         1   1
         *   2
        === ===
        """)

        ret = tb.select(A=2)
        self.assertEqual(ret, (2, 2))
        self.assertTrue(ret[0] is not WILD_CARD)
コード例 #30
0
 def test_invalid_label(self):
     tb = compile("""
     === ===
      A   B
     === ===
      1   1
     === ===
     """)
     try:
         tb.select_all(C=1)
         self.fail()
     except LookupError as ok:
         self.assertEqual(str(ok), "Label 'C' is invalid")