github.com/whtcorpsinc/milevadb-prod@v0.0.0-20211104133533-f57f4be3b597/causetstore/petri/acyclic/causet/memo/pattern_test.go (about)

     1  // Copyright 2020 WHTCORPS INC, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package memo
    15  
    16  import (
    17  	. "github.com/whtcorpsinc/check"
    18  	causetembedded "github.com/whtcorpsinc/milevadb/causet/embedded"
    19  )
    20  
    21  func (s *testMemoSuite) TestGetOperand(c *C) {
    22  	c.Assert(GetOperand(&causetembedded.LogicalJoin{}), Equals, OperandJoin)
    23  	c.Assert(GetOperand(&causetembedded.LogicalAggregation{}), Equals, OperanPosetDaggregation)
    24  	c.Assert(GetOperand(&causetembedded.LogicalProjection{}), Equals, OperandProjection)
    25  	c.Assert(GetOperand(&causetembedded.LogicalSelection{}), Equals, OperandSelection)
    26  	c.Assert(GetOperand(&causetembedded.LogicalApply{}), Equals, OperandApply)
    27  	c.Assert(GetOperand(&causetembedded.LogicalMaxOneRow{}), Equals, OperandMaxOneRow)
    28  	c.Assert(GetOperand(&causetembedded.LogicalBlockDual{}), Equals, OperandBlockDual)
    29  	c.Assert(GetOperand(&causetembedded.DataSource{}), Equals, OperandDataSource)
    30  	c.Assert(GetOperand(&causetembedded.LogicalUnionScan{}), Equals, OperandUnionScan)
    31  	c.Assert(GetOperand(&causetembedded.LogicalUnionAll{}), Equals, OperandUnionAll)
    32  	c.Assert(GetOperand(&causetembedded.LogicalSort{}), Equals, OperandSort)
    33  	c.Assert(GetOperand(&causetembedded.LogicalTopN{}), Equals, OperandTopN)
    34  	c.Assert(GetOperand(&causetembedded.LogicalLock{}), Equals, OperandLock)
    35  	c.Assert(GetOperand(&causetembedded.LogicalLimit{}), Equals, OperandLimit)
    36  }
    37  
    38  func (s *testMemoSuite) TestOperandMatch(c *C) {
    39  	c.Assert(OperandAny.Match(OperandLimit), IsTrue)
    40  	c.Assert(OperandAny.Match(OperandSelection), IsTrue)
    41  	c.Assert(OperandAny.Match(OperandJoin), IsTrue)
    42  	c.Assert(OperandAny.Match(OperandMaxOneRow), IsTrue)
    43  	c.Assert(OperandAny.Match(OperandAny), IsTrue)
    44  
    45  	c.Assert(OperandLimit.Match(OperandAny), IsTrue)
    46  	c.Assert(OperandSelection.Match(OperandAny), IsTrue)
    47  	c.Assert(OperandJoin.Match(OperandAny), IsTrue)
    48  	c.Assert(OperandMaxOneRow.Match(OperandAny), IsTrue)
    49  	c.Assert(OperandAny.Match(OperandAny), IsTrue)
    50  
    51  	c.Assert(OperandLimit.Match(OperandLimit), IsTrue)
    52  	c.Assert(OperandSelection.Match(OperandSelection), IsTrue)
    53  	c.Assert(OperandJoin.Match(OperandJoin), IsTrue)
    54  	c.Assert(OperandMaxOneRow.Match(OperandMaxOneRow), IsTrue)
    55  	c.Assert(OperandAny.Match(OperandAny), IsTrue)
    56  
    57  	c.Assert(OperandLimit.Match(OperandSelection), IsFalse)
    58  	c.Assert(OperandLimit.Match(OperandJoin), IsFalse)
    59  	c.Assert(OperandLimit.Match(OperandMaxOneRow), IsFalse)
    60  }
    61  
    62  func (s *testMemoSuite) TestNewPattern(c *C) {
    63  	p := NewPattern(OperandAny, EngineAll)
    64  	c.Assert(p.Operand, Equals, OperandAny)
    65  	c.Assert(p.Children, IsNil)
    66  
    67  	p = NewPattern(OperandJoin, EngineAll)
    68  	c.Assert(p.Operand, Equals, OperandJoin)
    69  	c.Assert(p.Children, IsNil)
    70  }
    71  
    72  func (s *testMemoSuite) TestPatternSetChildren(c *C) {
    73  	p := NewPattern(OperandAny, EngineAll)
    74  	p.SetChildren(NewPattern(OperandLimit, EngineAll))
    75  	c.Assert(len(p.Children), Equals, 1)
    76  	c.Assert(p.Children[0].Operand, Equals, OperandLimit)
    77  	c.Assert(p.Children[0].Children, IsNil)
    78  
    79  	p = NewPattern(OperandJoin, EngineAll)
    80  	p.SetChildren(NewPattern(OperandProjection, EngineAll), NewPattern(OperandSelection, EngineAll))
    81  	c.Assert(len(p.Children), Equals, 2)
    82  	c.Assert(p.Children[0].Operand, Equals, OperandProjection)
    83  	c.Assert(p.Children[0].Children, IsNil)
    84  	c.Assert(p.Children[1].Operand, Equals, OperandSelection)
    85  	c.Assert(p.Children[1].Children, IsNil)
    86  }