Assert.AreEqual(this.RootMaterialIndex,scene.MaterialIndex,"MaterialIndex property on root should be RootMaterialIndex");
Assert.AreEqual(this.RootMaterialIndex,scene.WorldMaterialIndex(),"WorldMaterialIndex on root should be RootMaterialIndex");
// Validate red node
Assert.AreEqual(this.RedMaterialIndex,redItem.MaterialIndex,"MaterialIndex property on node should be RedMaterialIndex");
Assert.AreEqual(this.GroupMaterialIndex,redItem.WorldMaterialIndex(redItem.Parent),"WorldMaterialIndex on Red up to parent node should be GroupMaterialIndex");
Assert.AreEqual(this.SuperGroupMaterialIndex,redItem.WorldMaterialIndex(superGroup),"WorldMaterialIndex on Red up to supergroup should be SuperGroupMaterialIndex");
// Validate green node
Assert.AreEqual(this.GreenMaterialIndex,greenItem.MaterialIndex,"MaterialIndex property on node should be GreenMaterialIndex");
Assert.AreEqual(this.GroupMaterialIndex,greenItem.WorldMaterialIndex(greenItem.Parent),"WorldMaterialIndex on Green up to parent node should be GroupMaterialIndex");
Assert.AreEqual(this.SuperGroupMaterialIndex,greenItem.WorldMaterialIndex(superGroup),"WorldMaterialIndex on Green up to supergroup should be SuperGroupMaterialIndex");
// Validate green node
Assert.AreEqual(this.BlueMaterialIndex,blueItem.MaterialIndex,"MaterialIndex property on node should be BlueMaterialIndex");
Assert.AreEqual(this.GroupMaterialIndex,blueItem.WorldMaterialIndex(blueItem.Parent),"WorldMaterialIndex on Blue up to parent node should be GroupMaterialIndex");
Assert.AreEqual(this.SuperGroupMaterialIndex,blueItem.WorldMaterialIndex(superGroup),"WorldMaterialIndex on Blue up to supergroup should be SuperGroupMaterialIndex");
// Validate MaterialIndex with null param
Assert.AreEqual(this.RootMaterialIndex,redItem.WorldMaterialIndex(null),"WorldMaterialIndex on Red with null param should be root color (RootMaterialIndex)");
Assert.AreEqual(this.RootMatrix,scene.Matrix,"Matrix property on root should be RootMatrix");
Assert.AreEqual(this.RootMatrix,scene.WorldMatrix(),"WorldMatrix on root should be RootMatrix");
// Validate red node
Assert.AreEqual(this.RedMatrix,redItem.Matrix,"Matrix property on node should be RedMatrix");
Assert.AreEqual(redItem.Matrix*this.GroupMatrix,redItem.WorldMatrix(redItem.Parent),"WorldMatrix on Red up to parent node should be GroupMatrix");
Assert.AreEqual(this.RedMatrix*this.GroupMatrix*this.SuperGroupMatrix,redItem.WorldMatrix(superGroup),"WorldMatrix on Red up to supergroup invalid");
// Validate green node
Assert.AreEqual(this.GreenMatrix,greenItem.Matrix,"Matrix property on node should be GreenMatrix");
Assert.AreEqual(this.GreenMatrix*this.GroupMatrix,greenItem.WorldMatrix(greenItem.Parent),"WorldMatrix on Green up to parent node should be GroupMatrix");
Assert.AreEqual(this.GreenMatrix*this.GroupMatrix*this.SuperGroupMatrix,greenItem.WorldMatrix(superGroup),"WorldMatrix on Green up to supergroup should be SuperGroupMatrix");
// Validate green node
Assert.AreEqual(this.BlueMatrix,blueItem.Matrix,"Matrix property on node should be BlueMatrix");
Assert.AreEqual(this.BlueMatrix*this.GroupMatrix,blueItem.WorldMatrix(blueItem.Parent),"WorldMatrix on Blue up to parent node should be GroupMatrix");
Assert.AreEqual(this.BlueMatrix*this.GroupMatrix*this.SuperGroupMatrix,blueItem.WorldMatrix(superGroup),"WorldMatrix on Blue up to supergroup should be SuperGroupMatrix");
// Validate Matrix with null param
Assert.AreEqual(this.RedMatrix*this.GroupMatrix*this.SuperGroupMatrix,redItem.WorldMatrix(null),"WorldMatrix on Red with null param should be root color (RootMatrix)");
Assert.AreEqual(this.RootOutputType,scene.OutputType,"OutputType property on root should be RootOutputType");
Assert.AreEqual(this.RootOutputType,scene.WorldOutputType(),"WorldOutputType on root should be RootOutputType");
// Validate red node
Assert.AreEqual(this.RedOutputType,redItem.OutputType,"OutputType property on node should be RedOutputType");
Assert.AreEqual(this.GroupOutputType,redItem.WorldOutputType(redItem.Parent),"WorldOutputType on Red up to parent node should be GroupOutputType");
Assert.AreEqual(this.SuperGroupOutputType,redItem.WorldOutputType(superGroup),"WorldOutputType on Red up to supergroup should be SuperGroupOutputType");
// Validate green node
Assert.AreEqual(this.GreenOutputType,greenItem.OutputType,"OutputType property on node should be GreenOutputType");
Assert.AreEqual(this.GroupOutputType,greenItem.WorldOutputType(greenItem.Parent),"WorldOutputType on Green up to parent node should be GroupOutputType");
Assert.AreEqual(this.SuperGroupOutputType,greenItem.WorldOutputType(superGroup),"WorldOutputType on Green up to supergroup should be SuperGroupOutputType");
// Validate green node
Assert.AreEqual(this.BlueOutputType,blueItem.OutputType,"OutputType property on node should be BlueOutputType");
Assert.AreEqual(this.GroupOutputType,blueItem.WorldOutputType(blueItem.Parent),"WorldOutputType on Blue up to parent node should be GroupOutputType");
Assert.AreEqual(this.SuperGroupOutputType,blueItem.WorldOutputType(superGroup),"WorldOutputType on Blue up to supergroup should be SuperGroupOutputType");
// Validate OutputType with null param
Assert.AreEqual(this.RootOutputType,redItem.WorldOutputType(null),"WorldOutputType on Red with null param should be root color (RootOutputType)");
Assert.AreEqual(this.RootMaterialIndex,scene.MaterialIndex,"MaterialIndex property on root should be RootMaterialIndex");
Assert.AreEqual(this.RootMaterialIndex,scene.WorldMaterialIndex(),"WorldMaterialIndex on root should be RootMaterialIndex");
// Validate red node
Assert.AreEqual(this.RedMaterialIndex,redItem.MaterialIndex,"Color property on node should be Red");
// Validate WorldColor with non-ancestor param
Assert.AreEqual(this.RootMaterialIndex,redItem.WorldMaterialIndex(nonAncestor),"WorldMaterialIndex on Red with non-ancestor should be RootMaterialIndex");
Assert.AreEqual(this.RedMatrix*this.GroupMatrix*this.SuperGroupMatrix,redItem.WorldMatrix(nonAncestor),"WorldMatrix on Red with non-ancestor should be RootMaterialIndex");