diff --git a/src/sparql/algebra.rs b/src/sparql/algebra.rs index d22991a2..97003d2d 100644 --- a/src/sparql/algebra.rs +++ b/src/sparql/algebra.rs @@ -1342,388 +1342,3 @@ impl fmt::Display for Query { } } } - -/* TODO: tests -/// Implementation of https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#sparqlAlgebraExamples -#[test] -fn test_sparql_algebra_examples() { - assert_eq!( - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p"), - Variable::new("o") - )).try_into(), - Ok(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p"), - Variable::new("o"), - )])) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )), - ]).try_into(), - Ok(GraphPattern::BGP(vec![ - PathPattern::new(Variable::new("s"), Variable::new("p1"), Variable::new("v1")), - PathPattern::new(Variable::new("s"), Variable::new("p2"), Variable::new("v2")), - ])) - ); - - assert_eq!( - ast::GraphPattern::UnionPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )), - ]).try_into(), - Ok(GraphPattern::Union( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - )) - ); - - assert_eq!( - ast::GraphPattern::UnionPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )), - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p3"), - Variable::new("v3"), - )), - ]).try_into(), - Ok(GraphPattern::Union( - Box::new(GraphPattern::Union( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - )), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p3"), - Variable::new("v3"), - )])), - )) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::OptionalPattern(Box::new(ast::GraphPattern::PathPattern( - ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - ), - ))), - ]).try_into(), - Ok(GraphPattern::LeftJoin( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - ast::Expression::ConstantExpression(Literal::from(true).into()), - )) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::OptionalPattern(Box::new(ast::GraphPattern::PathPattern( - ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - ), - ))), - ast::GraphPattern::OptionalPattern(Box::new(ast::GraphPattern::PathPattern( - ast::PathPattern::new( - Variable::new("s"), - Variable::new("p3"), - Variable::new("v3"), - ), - ))), - ]).try_into(), - Ok(GraphPattern::LeftJoin( - Box::new(GraphPattern::LeftJoin( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - ast::Expression::ConstantExpression(Literal::from(true).into()), - )), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p3"), - Variable::new("v3"), - )])), - ast::Expression::ConstantExpression(Literal::from(true).into()), - )) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::OptionalPattern(Box::new(ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )), - ast::GraphPattern::FilterPattern(ast::Expression::LowerExpression( - Box::new(ast::Expression::ConstantExpression( - Variable::new("v1").into(), - )), - Box::new(ast::Expression::ConstantExpression(Literal::from(3).into())), - )), - ]))), - ]).try_into(), - Ok(GraphPattern::LeftJoin( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - ast::Expression::LowerExpression( - Box::new(ast::Expression::ConstantExpression( - Variable::new("v1").into(), - )), - Box::new(ast::Expression::ConstantExpression(Literal::from(3).into())), - ), - )) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::UnionPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )), - ]), - ast::GraphPattern::OptionalPattern(Box::new(ast::GraphPattern::PathPattern( - ast::PathPattern::new( - Variable::new("s"), - Variable::new("p3"), - Variable::new("v3"), - ), - ))), - ]).try_into(), - Ok(GraphPattern::LeftJoin( - Box::new(GraphPattern::Union( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - )), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p3"), - Variable::new("v3"), - )])), - ast::Expression::ConstantExpression(Literal::from(true).into()), - )) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )), - ast::GraphPattern::FilterPattern(ast::Expression::LowerExpression( - Box::new(ast::Expression::ConstantExpression( - Variable::new("v1").into(), - )), - Box::new(ast::Expression::ConstantExpression(Literal::from(3).into())), - )), - ast::GraphPattern::OptionalPattern(Box::new(ast::GraphPattern::PathPattern( - ast::PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - ), - ))), - ]).try_into(), - Ok(GraphPattern::Filter( - ast::Expression::LowerExpression( - Box::new(ast::Expression::ConstantExpression( - Variable::new("v1").into(), - )), - Box::new(ast::Expression::ConstantExpression(Literal::from(3).into())), - ), - Box::new(GraphPattern::LeftJoin( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v1"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p2"), - Variable::new("v2"), - )])), - ast::Expression::ConstantExpression(Literal::from(true).into()), - )), - )) - ); - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p"), - Variable::new("v"), - )), - ast::GraphPattern::BindPattern( - ast::Expression::MulExpression( - Box::new(ast::Expression::ConstantExpression(Literal::from(2).into())), - Box::new(ast::Expression::ConstantExpression( - Variable::new("v").into(), - )), - ), - Variable::new("v2"), - ), - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v2"), - )), - ]).try_into(), - Ok(GraphPattern::Join( - Box::new(GraphPattern::Extend( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p"), - Variable::new("v"), - )])), - Variable::new("v2"), - ast::Expression::MulExpression( - Box::new(ast::Expression::ConstantExpression(Literal::from(2).into())), - Box::new(ast::Expression::ConstantExpression( - Variable::new("v").into(), - )), - ), - )), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v2"), - )])), - )) - ); - - //TODO: { ?s :p ?v . {} BIND (2*?v AS ?v2) } - - assert_eq!( - ast::GraphPattern::GroupPattern(vec![ - ast::GraphPattern::PathPattern(ast::PathPattern::new( - Variable::new("s"), - Variable::new("p"), - Variable::new("v"), - )), - ast::GraphPattern::MinusPattern(Box::new(ast::GraphPattern::PathPattern( - ast::PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v2"), - ), - ))), - ]).try_into(), - Ok(GraphPattern::Minus( - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p"), - Variable::new("v"), - )])), - Box::new(GraphPattern::BGP(vec![PathPattern::new( - Variable::new("s"), - Variable::new("p1"), - Variable::new("v2"), - )])), - )) - ); - - //TODO { ?s :p ?o . {SELECT DISTINCT ?o {?o ?p ?z} } } -}*/