REQUIRE_TRUE(h0->isSameShape(correctH0Shape),0,"LSTM operation: wrong shape of initial cell output, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctH0Shape).c_str(),ShapeUtils::shapeAsString(h0).c_str());
REQUIRE_TRUE(c0->isSameShape(correctC0Shape),0,"LSTM operation: wrong shape of initial cell state, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctC0Shape).c_str(),ShapeUtils::shapeAsString(c0).c_str());
REQUIRE_TRUE(Wx->isSameShape(correctWxShape),0,"LSTM operation: wrong shape of input-to-hidden weights, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWxShape).c_str(),ShapeUtils::shapeAsString(Wx).c_str());
REQUIRE_TRUE(Wh->isSameShape(correctWhShape),0,"LSTM operation: wrong shape of hidden-to-hidden weights, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWhShape).c_str(),ShapeUtils::shapeAsString(Wh).c_str());
REQUIRE_TRUE(Wc->isSameShape(correctWcShape),0,"LSTM operation: wrong shape of diagonal weights for peephole connections, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWcShape).c_str(),ShapeUtils::shapeAsString(Wc).c_str());
REQUIRE_TRUE(Wp->isSameShape(correctWpShape),0,"LSTM operation: wrong shape of projection weights, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWpShape).c_str(),ShapeUtils::shapeAsString(Wp).c_str());
REQUIRE_TRUE(b->isSameShape(correctBShape),0,"LSTM operation: wrong shape of biases, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctBShape).c_str(),ShapeUtils::shapeAsString(b).c_str());
REQUIRE_TRUE(!(!projection&&numUnits!=numProj),0,"LSTM operation: projection option is switched of, and in this case output dimensionality for the projection matrices (numProj) must be equal to number of units in lstmCell !");
REQUIRE_TRUE(ShapeUtils::areShapesEqual(h0ShapeInfo,correctH0Shape),0,"LSTM operation: wrong shape of initial cell output, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctH0Shape).c_str(),ShapeUtils::shapeAsString(h0ShapeInfo).c_str());
REQUIRE_TRUE(ShapeUtils::areShapesEqual(c0ShapeInfo,correctC0Shape),0,"LSTM operation: wrong shape of initial cell state, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctC0Shape).c_str(),ShapeUtils::shapeAsString(c0ShapeInfo).c_str());
REQUIRE_TRUE(ShapeUtils::areShapesEqual(WxShapeInfo,correctWxShape),0,"LSTM operation: wrong shape of input-to-hidden weights, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWxShape).c_str(),ShapeUtils::shapeAsString(WxShapeInfo).c_str());
REQUIRE_TRUE(ShapeUtils::areShapesEqual(WhShapeInfo,correctWhShape),0,"LSTM operation: wrong shape of hidden-to-hidden weights, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWhShape).c_str(),ShapeUtils::shapeAsString(WhShapeInfo).c_str());
REQUIRE_TRUE(ShapeUtils::areShapesEqual(WcShapeInfo,correctWcShape),0,"LSTM operation: wrong shape of diagonal weights for peephole connections, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWcShape).c_str(),ShapeUtils::shapeAsString(WcShapeInfo).c_str());
REQUIRE_TRUE(ShapeUtils::areShapesEqual(WpShapeInfo,correctWpShape),0,"LSTM operation: wrong shape of projection weights, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctWpShape).c_str(),ShapeUtils::shapeAsString(WpShapeInfo).c_str());
REQUIRE_TRUE(ShapeUtils::areShapesEqual(bShapeInfo,correctBShape),0,"LSTM operation: wrong shape of biases, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(correctBShape).c_str(),ShapeUtils::shapeAsString(bShapeInfo).c_str());