void ParsePositionTest::TestParsePosition() { ParsePosition pp1(0); if (pp1.getIndex() == 0) { logln("PP constructor() tested."); }else{ errln("*** PP getIndex or constructor() result"); } { int to = 5; ParsePosition pp2( to ); if (pp2.getIndex() == 5) { logln("PP getIndex and constructor(int32_t) tested."); }else{ errln("*** PP getIndex or constructor(int32_t) result"); } pp2.setIndex( 3 ); if (pp2.getIndex() == 3) { logln("PP setIndex tested."); }else{ errln("*** PP getIndex or setIndex result"); } } ParsePosition pp2(3), pp3(5); //pp2 = new ParsePosition( 3 ); //pp3 = new ParsePosition( 5 ); ParsePosition pp4(5); if ( pp2 != pp3) { logln("PP not equals tested."); }else{ errln("*** PP not equals fails"); } if (pp3 == pp4) { logln("PP equals tested."); }else{ errln(UnicodeString("*** PP equals fails (") + pp3.getIndex() + " != " + pp4.getIndex() + ")"); } ParsePosition pp5; pp5 = pp4; if (pp4 == pp5) { logln("PP operator= tested."); }else{ errln("*** PP operator= operator== or operator != result"); } ParsePosition *ppp = pp5.clone(); if(ppp == &pp5 || *ppp != pp5) { errln("ParsePosition.clone() failed"); } delete ppp; }
void InsertProjectTester::testTeamResource() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addResourceGroup( part ); Resource *r = addResource( part ); r->setType( Resource::Type_Team ); ResourceGroup *tg = addResourceGroup( part ); Resource *t1 = addResource( part, tg ); Resource *t2 = addResource( part, tg ); r->setRequiredIds( QStringList() << t1->id() << t2->id() ); Project &p = part.getProject(); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( p.resourceGroupAt( 1 )->numResources() == 2 ); QList<Resource*> required = p.resourceGroupAt( 0 )->resources().at( 0 )->requiredResources(); QCOMPARE( required.count(), 2 ); QCOMPARE( required.at( 0 ), t1 ); QCOMPARE( required.at( 1 ), t2 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); Project &p2 = part2.getProject(); QVERIFY( p2.resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( p2.resourceGroupAt( 1 )->numResources() == 2 ); required = p2.resourceGroupAt( 0 )->resources().at( 0 )->requiredResources(); QCOMPARE( required.count(), 2 ); QCOMPARE( required.at( 0 ), t1 ); QCOMPARE( required.at( 1 ), t2 ); }
void InsertProjectTester::testTeamResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); Resource *r = addResource( part ); r->setType( Resource::Type_Team ); ResourceGroup *tg = addResourceGroup( part ); Resource *t1 = addResource( part, tg ); r->addTeamMemberId( t1->id() ); Resource *t2 = addResource( part, tg ); r->addTeamMemberId( t2->id() ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); qDebug()<<"Start test:"; Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( part.getProject(), 0, 0 ); Project &p2 = part2.getProject(); ResourceRequest *rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource(), r ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); }
void InsertProjectTester::testDefaultCalendar() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); Calendar *c = addCalendar( part ); Project &p = part.getProject(); p.setDefaultCalendar( c ); QVERIFY( p.calendarCount() == 1 ); QCOMPARE( p.defaultCalendar(), c ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().calendarCount() == 1 ); QCOMPARE( part2.getProject().defaultCalendar(), c ); Part ppB(0); MainDocument partB( &ppB ); ppB.setDocument( &partB ); Calendar *c2 = addCalendar( partB ); partB.getProject().setDefaultCalendar( c2 ); part2.insertProject( partB.getProject(), 0, 0 ); QVERIFY( part2.getProject().calendarCount() == 2 ); QCOMPARE( part2.getProject().defaultCalendar(), c ); // NB: still c, not c2 }
void InsertProjectTester::testAccount() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addAccount( part ); Project &p = part.getProject(); QCOMPARE( p.accounts().accountCount(), 1 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QCOMPARE( part2.getProject().accounts().accountCount(), 1 ); part2.insertProject( part.getProject(), 0, 0 ); QCOMPARE( part2.getProject().accounts().accountCount(), 1 ); Part ppB(0); MainDocument partB( &ppB ); ppB.setDocument( &partB ); Account *parent = addAccount( partB ); QCOMPARE( partB.getProject().accounts().accountCount(), 1 ); addAccount( partB, parent ); QCOMPARE( partB.getProject().accounts().accountCount(), 1 ); QCOMPARE( parent->childCount(), 1 ); part2.insertProject( partB.getProject(), 0, 0 ); QCOMPARE( part2.getProject().accounts().accountCount(), 1 ); QCOMPARE( part2.getProject().accounts().accountAt( 0 )->childCount(), 1 ); }
TEST(Proxy, Property) { boost::shared_ptr<Bar> bar(new Bar); qi::AnyObject gbar = qi::AnyReference::from(bar).toObject(); ASSERT_TRUE(!!gbar); // The session must die before bar. TestSessionPair p; p.server()->registerService("bar", gbar); // we need that to force two clients p.server()->registerService("bar2", gbar); qi::AnyObject client = p.client()->service("bar"); ASSERT_EQ(0, client.call<int>("sum")); qi::ProxyProperty<int> pp(client, "prop"); bar->set(1); ASSERT_EQ(1, pp.get()); pp.set(2); ASSERT_EQ(2, bar->get()); // althoug PropertyProxy::set is itself synchronous, notify on remote end // may be asynchronous, so subscribe below may come too soon and catch // the pp.set above qi::os::msleep(100); qiLogDebug() << "subscribe"; bar->subscribe(); qi::os::msleep(100); qiLogDebug() << "set 3"; pp.set(3); // this is an event, all notify are asychronous PERSIST_ASSERT(, bar->sum() == 3, 500); Bar bar2; qi::SignalLink l = pp.connect(boost::bind(&Bar::onProp, &bar2, _1)); bar->set(4); // this one is async (remote notify of local property set) PERSIST_ASSERT(, bar2.sum() == 4, 500); pp.disconnect(l); bar->set(5); // we expect an async op *not* to happen, no choice but wait. qi::os::msleep(200); ASSERT_EQ(4, bar2.sum()); // reconnect to see if disconnect did not break anything l = pp.connect(boost::bind(&Bar::onProp, &bar2, _1)); bar->set(4); PERSIST_ASSERT(, bar2.sum() == 8, 500); // proxy-proxy qi::AnyObject client2 = p.client()->service("bar2"); qi::ProxyProperty<int> pp2(client2, "prop"); Bar bar3; pp2.connect(boost::bind(&Bar::onProp, &bar3, _1)); qiLogDebug() << "set 2"; pp.set(2); PERSIST(, bar3.sum() == 2, 1000); ASSERT_EQ(2, bar3.sum()); PERSIST(, bar2.sum() == 10, 500); ASSERT_EQ(10, bar2.sum()); qiLogDebug() << "set 3"; pp2.set(3); PERSIST_ASSERT(, bar2.sum() == 13, 500); PERSIST_ASSERT(, bar3.sum() == 5, 500); }
//=========================================================================== shared_ptr<ParamCurve> Param2FunctionInt::getConstantParameterCurve(int pardir, double par) //=========================================================================== { // Get the current parameter domain vector<double> mima = getMima(); // End-parameter values of the curve double param1[2], param2[2]; int idx2 = 1-pardir; param1[pardir] = param2[pardir] = par; param1[idx2] = mima[2*idx2]; param2[idx2] = mima[2*idx2+1]; // Make constant parameter curve as a curve-on-surface curve Point pp1(param1[0], param1[1]), pp2(param2[0], param2[1]); shared_ptr<SplineCurve> pcrv = shared_ptr<SplineCurve>(new SplineCurve(pp1, param1[idx2], pp2, param2[idx2])); shared_ptr<ParamCurve> constcrv = shared_ptr<ParamCurve>(new CurveOnSurface(getParamSurface(), pcrv, true)); return constcrv; }
void InsertProjectTester::testExistingResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); addResource( part ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); QDomDocument doc = part.saveXML(); Project &p = part.getProject(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); Project &p2 = part2.getProject(); QVERIFY( p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); QVERIFY( p2.childNode( 1 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); }
void InsertProjectTester::testResourceCalendar() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); Calendar *c = addCalendar( part ); Project &p = part.getProject(); QVERIFY( p.calendarCount() == 1 ); addResourceGroup( part ); Resource *r = addResource( part ); part.addCommand( new ModifyResourceCalendarCmd( r, c ) ); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QCOMPARE( part2.getProject().allCalendars().count(), 1 ); QVERIFY( part2.getProject().allCalendars().contains( c ) ); QCOMPARE( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->calendar( true ), c ); }
void InsertProjectTester::testDependencies() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); Task *t1 = addTask( part ); Task *t2 = addTask( part ); QCOMPARE( t1->numDependChildNodes(), 0 ); QCOMPARE( t2->numDependParentNodes(), 0 ); Relation *r = addDependency( part, t1, t2 ); QCOMPARE( t1->numDependChildNodes(), 1 ); QCOMPARE( t2->numDependParentNodes(), 1 ); QCOMPARE( t1->getDependChildNode( 0 ), r ); QCOMPARE( t2->getDependParentNode( 0 ), r ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); QVERIFY( part2.insertProject( part.getProject(), 0, 0 ) ); Project &p2 = part2.getProject(); QVERIFY( p2.numChildren() == 2 ); QCOMPARE( p2.childNode( 0 ), t1 ); QCOMPARE( p2.childNode( 1 ), t2 ); QCOMPARE( t1->numDependChildNodes(), 1 ); QCOMPARE( t2->numDependParentNodes(), 1 ); QCOMPARE( t1->getDependChildNode( 0 ), r ); QCOMPARE( t2->getDependParentNode( 0 ), r ); }
void VoronoiCgal_Patch::Compute() { m_CgalPatchs = MakePatchs(m_ImageSpline); for (int i = 0; i < m_CgalPatchs.size(); ++i) { m_Delaunay = Delaunay(); insert_polygon(m_Delaunay, m_ImageSpline, i); insert_polygonInter(m_Delaunay, m_ImageSpline, i); Mesher mesher(m_Delaunay); Criteria criteria(0, 100); mesher.set_criteria(criteria); mesher.refine_mesh(); mark_domains(m_Delaunay); LineSegs lineSegs; for (auto e = m_Delaunay.finite_edges_begin(); e != m_Delaunay.finite_edges_end(); ++e) { Delaunay::Face_handle fn = e->first->neighbor(e->second); //CGAL::Object o = m_Delaunay.dual(e); if (!fn->is_in_domain() || !fn->info().in_domain()) { continue; } if (!m_Delaunay.is_constrained(*e) && (!m_Delaunay.is_infinite(e->first)) && (!m_Delaunay.is_infinite(e->first->neighbor(e->second)))) { Delaunay::Segment s = m_Delaunay.geom_traits().construct_segment_2_object() (m_Delaunay.circumcenter(e->first), m_Delaunay.circumcenter(e->first->neighbor(e->second))); const CgalInexactKernel::Segment_2* seg = &s; CgalPoint p1(seg->source().hx(), seg->source().hy()); CgalPoint p2(seg->target().hx(), seg->target().hy()); Vector2 pp1(p1.hx(), p1.hy()); Vector2 pp2(p2.hx(), p2.hy()); if (pp1 == pp2) { continue; } lineSegs.push_back(LineSeg(pp1, pp2)); } } for (auto it = lineSegs.begin(); it != lineSegs.end(); ++it) { //m_PositionGraph.AddNewLine(it->beg, it->end, ); } } m_PositionGraph.ComputeJoints(); //printf("joints: %d\n", m_PositionGraph.m_Joints.size()); //MakeLines(); MakeGraphLines(); }
void InsertProjectTester::testExistingTeamResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); Resource *r = addResource( part ); r->setName( "R1" ); r->setType( Resource::Type_Team ); ResourceGroup *tg = addResourceGroup( part ); tg->setName( "TG" ); Resource *t1 = addResource( part, tg ); t1->setName( "T1" ); r->addTeamMemberId( t1->id() ); Resource *t2 = addResource( part, tg ); t2->setName( "T2" ); r->addTeamMemberId( t2->id() ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); QDomDocument doc = part.saveXML(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); Project &p2 = part2.getProject(); part2.insertProject( part.getProject(), 0, 0 ); ResourceRequest *rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QCOMPARE( p2.numChildren(), 2 ); QVERIFY( ! p2.childNode( 0 )->requests().isEmpty() ); rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); QVERIFY( ! p2.childNode( 1 )->requests().isEmpty() ); rr = p2.childNode( 1 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QCOMPARE( rr->resource()->teamMembers().count(), 2 ); QCOMPARE( rr->resource()->teamMembers().at( 0 ), t1 ); QCOMPARE( rr->resource()->teamMembers().at( 1 ), t2 ); }
void LineSegment::updateGrips(int* grips, QRectF* grip) const { *grips = 3; QPointF pp(pagePos()); QPointF pp1(pp); QPointF pp2(pos2() + pp); QPointF pp3(pos2() * .5 + pp); grip[2].translate(pp3); grip[1].translate(pp2); grip[0].translate(pp1); }
TEST_F(TimusProblemsTestClass, TestProblem_1815) // NOLINT { Pt p1(0.f, 0.f); Pt p2(p1); p2.x = p2.y = 1.f; ASSERT_EQ(0.f, p1.x); ASSERT_EQ(1.f, p2.x); ASSERT_TRUE(sqrt(2.f) - p1.dist(p2) < 0.000001f); Pt pp1(0.f, 0.f); Pt pp2(1.f, 0.f); Pt pp3(0.f, 1.f); double result = solve_1815(pp1, pp2, pp3, 1, 1, 1); ASSERT_TRUE(result - 1.9318516526 < 0.0000000001); }
void InsertProjectTester::testResourceGroup() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addResourceGroup( part ); Project &p = part.getProject(); QVERIFY( p.resourceGroupCount() == 1 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupCount() == 1 ); }
void test_ParsePosition( void ) { ParsePosition* pp1 = new ParsePosition(); if (pp1 && (pp1->getIndex() == 0)) { it_logln("PP constructor() tested."); }else{ it_errln("*** PP getIndex or constructor() result"); } delete pp1; { int32_t to = 5; ParsePosition pp2( to ); if (pp2.getIndex() == 5) { it_logln("PP getIndex and constructor(int32_t) tested."); }else{ it_errln("*** PP getIndex or constructor(int32_t) result"); } pp2.setIndex( 3 ); if (pp2.getIndex() == 3) { it_logln("PP setIndex tested."); }else{ it_errln("*** PP getIndex or setIndex result"); } } ParsePosition pp2, pp3; pp2 = 3; pp3 = 5; ParsePosition pp4( pp3 ); if ((pp2 != pp3) && (pp3 == pp4)) { it_logln("PP copy contructor, operator== and operator != tested."); }else{ it_errln("*** PP operator== or operator != result"); } ParsePosition pp5; pp5 = pp4; if ((pp4 == pp5) && (!(pp4 != pp5))) { it_logln("PP operator= tested."); }else{ it_errln("*** PP operator= operator== or operator != result"); } }
void InsertProjectTester::testExistingRequiredResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); Resource *r = addResource( part ); ResourceGroup *g = addResourceGroup( part ); g->setType( ResourceGroup::Type_Material ); QList<Resource*> m; m << addResource( part, g ); m.first()->setType( Resource::Type_Material ); r->setRequiredIds( QStringList() << m.first()->id() ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); QDomDocument doc = part.saveXML(); Project &p = part.getProject(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); Project &p2 = part2.getProject(); ResourceRequest *rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QVERIFY( ! rr->requiredResources().isEmpty() ); QCOMPARE( rr->requiredResources().at( 0 ), m.first() ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); rr = p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QVERIFY( ! rr->requiredResources().isEmpty() ); QCOMPARE( rr->requiredResources().at( 0 ), m.first() ); rr = p2.childNode( 1 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ); QVERIFY( rr ); QVERIFY( ! rr->requiredResources().isEmpty() ); QCOMPARE( rr->requiredResources().at( 0 ), m.first() ); }
void InsertProjectTester::testTask() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addTask( part ); Project &p = part.getProject(); QVERIFY( p.numChildren() == 1 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().numChildren() == 1 ); }
void LineSegment::updateGrips(int* grips, QRectF* grip) const { *grips = 3; /* if (line()->anchor() == Spanner::ANCHOR_NOTE) { grip[0].translate(pos()); grip[1].translate(pos2()); grip[2].translate(pos2() * .5); return; } */ QPointF pp(pagePos()); QPointF pp1(pp); QPointF pp2(pos2() + pp); QPointF pp3(pos2() * .5 + pp); grip[2].translate(pp3); grip[1].translate(pp2); grip[0].translate(pp1); }
void InsertProjectTester::testCalendar() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); Project &p = part.getProject(); QVERIFY( p.calendarCount() == 1 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( part2.getProject().calendarCount() == 1 ); QVERIFY( part2.getProject().defaultCalendar() == 0 ); }
void InsertProjectTester::testResourceRequest() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addCalendar( part ); addResourceGroup( part ); addResource( part ); addTask( part ); addGroupRequest( part ); addResourceRequest( part ); Project &p = part.getProject(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); Project &p2 = part2.getProject(); QVERIFY( p2.childNode( 0 )->requests().find( p2.resourceGroupAt( 0 )->resourceAt( 0 ) ) != 0 ); }
void InsertProjectTester::testExistingResourceCalendar() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); Calendar *c = addCalendar( part ); Project &p = part.getProject(); QVERIFY( p.calendarCount() == 1 ); addResourceGroup( part ); Resource *r = addResource( part ); part.addCommand( new ModifyResourceCalendarCmd( r, c ) ); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); QDomDocument doc = part.saveXML(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QCOMPARE( part2.getProject().allCalendars().count(), 1 ); QVERIFY( part2.getProject().allCalendars().contains( c ) ); QCOMPARE( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->calendar( true ), c ); part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->setCalendar( 0 ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QCOMPARE( part2.getProject().allCalendars().count(), 1 ); QVERIFY( part2.getProject().allCalendars().contains( c ) ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->calendar( true ) == 0 ); }
void InsertProjectTester::testResourceAccount() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addResourceGroup( part ); Resource *r = addResource( part ); Account *a = addAccount( part ); part.addCommand( new ResourceModifyAccountCmd( *r, r->account(), a ) ); Project &p = part.getProject(); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( part2.getProject().accounts().allAccounts().contains( a ) ); QCOMPARE( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account(), a ); }
void InsertProjectTester::testExistingResourceAccount() { Part pp(0); MainDocument part( &pp ); pp.setDocument( &part ); addResourceGroup( part ); Resource *r = addResource( part ); Account *a = addAccount( part ); part.addCommand( new ResourceModifyAccountCmd( *r, r->account(), a ) ); Project &p = part.getProject(); QVERIFY( p.resourceGroupAt( 0 )->numResources() == 1 ); QDomDocument doc = part.saveXML(); Part pp2(0); MainDocument part2( &pp2 ); pp2.setDocument( &part2 ); part2.insertProject( p, 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( part2.getProject().accounts().allAccounts().contains( a ) ); QCOMPARE( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account(), a ); part2.addCommand( new ResourceModifyAccountCmd( *(part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )), part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account(), 0 ) ); KoXmlDocument xdoc; xdoc.setContent( doc.toString() ); part.loadXML( xdoc, 0 ); part2.insertProject( part.getProject(), 0, 0 ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->numResources() == 1 ); QVERIFY( part2.getProject().accounts().allAccounts().contains( a ) ); QVERIFY( part2.getProject().resourceGroupAt( 0 )->resourceAt( 0 )->account() == 0 ); }
void TextLineSegment::draw(QPainter* painter) const { TextLine* tl = textLine(); qreal _spatium = spatium(); qreal textlineLineWidth = tl->lineWidth().val() * _spatium; qreal textlineTextDistance = _spatium * .5; QPointF pp2(pos2()); QColor color; bool normalColor = false; if (selected() && !(score() && score()->printing())) color = MScore::selectColor[0]; else if (!visible()) color = Qt::gray; else { color = curColor(); normalColor = true; } qreal l = 0.0; int sym = subtype() == SEGMENT_MIDDLE ? tl->continueSymbol() : tl->beginSymbol(); if (_text) { SpannerSegmentType st = subtype(); if ( ((st == SEGMENT_SINGLE || st == SEGMENT_BEGIN) && (tl->beginTextPlace() == PLACE_LEFT)) || ((st == SEGMENT_MIDDLE || st == SEGMENT_END) && (tl->continueTextPlace() == PLACE_LEFT)) ) { QRectF bb(_text->bbox()); l = _text->pos().x() + bb.width() + textlineTextDistance; } painter->translate(_text->pos()); painter->setPen(normalColor ? _text->curColor() : color); _text->draw(painter); painter->translate(-_text->pos()); } else if (sym != -1) { const QRectF& bb = symbols[score()->symIdx()][sym].bbox(magS()); qreal h = bb.height() * .5; QPointF o = tl->beginSymbolOffset() * _spatium; painter->setPen(color); symbols[score()->symIdx()][sym].draw(painter, 1.0, QPointF(o.x(), h + o.y())); l = bb.width() + textlineTextDistance; } QPen pen(normalColor ? tl->lineColor() : color, textlineLineWidth); pen.setStyle(tl->lineStyle()); painter->setPen(pen); if (subtype() == SEGMENT_SINGLE || subtype() == SEGMENT_END) { if (tl->endSymbol() != -1) { int sym = tl->endSymbol(); const QRectF& bb = symbols[score()->symIdx()][sym].bbox(magS()); qreal h = bb.height() * .5; QPointF o = tl->endSymbolOffset() * _spatium; pp2.setX(pp2.x() - bb.width() + textlineTextDistance); symbols[score()->symIdx()][sym].draw(painter, 1.0, QPointF(pp2.x() + textlineTextDistance + o.x(), h + o.y())); } } QPointF pp1(l, 0.0); if (tl->beginHook() && tl->beginHookType() == HOOK_45) pp1.rx() += fabs(tl->beginHookHeight().val() * _spatium * .4); if (tl->endHook() && tl->endHookType() == HOOK_45) pp2.rx() -= fabs(tl->endHookHeight().val() * _spatium * .4); painter->drawLine(QLineF(pp1.x(), pp1.y(), pp2.x(), pp2.y())); if (tl->beginHook()) { qreal hh = tl->beginHookHeight().val() * _spatium; if (subtype() == SEGMENT_SINGLE || subtype() == SEGMENT_BEGIN) { if (tl->beginHookType() == HOOK_45) painter->drawLine(QLineF(pp1.x(), pp1.y(), pp1.x() - fabs(hh * .4), pp1.y() + hh)); else painter->drawLine(QLineF(pp1.x(), pp1.y(), pp1.x(), pp1.y() + hh)); } } if (tl->endHook()) { qreal hh = tl->endHookHeight().val() * _spatium; if (subtype() == SEGMENT_SINGLE || subtype() == SEGMENT_END) { if (tl->endHookType() == HOOK_45) painter->drawLine(QLineF(pp2.x(), pp2.y(), pp2.x() + fabs(hh * .4), pp2.y() + hh)); else painter->drawLine(QLineF(pp2.x(), pp2.y(), pp2.x(), pp2.y() + hh)); } } }
void TextLineSegment::layout1() { TextLine* tl = textLine(); if (!tl->diagonal()) _userOff2.setY(0); switch (subtype()) { case SEGMENT_SINGLE: case SEGMENT_BEGIN: if (tl->beginText()) { if (_text == 0) { _text = new Text(*tl->beginText()); _text->setFlag(ELEMENT_MOVABLE, false); _text->setParent(this); } } else { delete _text; _text = 0; } break; case SEGMENT_MIDDLE: case SEGMENT_END: if (tl->continueText()) { if (_text == 0) { _text = new Text(*tl->continueText()); _text->setFlag(ELEMENT_MOVABLE, false); _text->setParent(this); } } else { delete _text; _text = 0; } break; } if (_text) _text->layout(); QPointF pp1; QPointF pp2(pos2()); if (!_text && pp2.y() != 0) { setbbox(QRectF(pp1, pp2).normalized()); return; } qreal y1 = point(-textLine()->lineWidth()); qreal y2 = -y1; int sym = textLine()->beginSymbol(); if (_text) { qreal h = _text->height(); if (textLine()->beginTextPlace() == PLACE_ABOVE) y1 = -h; else if (textLine()->beginTextPlace() == PLACE_BELOW) y2 = h; else { y1 = -h * .5; y2 = h * .5; } } else if (sym != -1) { qreal hh = symbols[score()->symIdx()][sym].height(magS()) * .5; y1 = -hh; y2 = hh; } if (textLine()->endHook()) { qreal h = point(textLine()->endHookHeight()); if (h > y2) y2 = h; else if (h < y1) y1 = h; } if (textLine()->beginHook()) { qreal h = point(textLine()->beginHookHeight()); if (h > y2) y2 = h; else if (h < y1) y1 = h; } bbox().setRect(.0, y1, pp2.x(), y2 - y1); }
void EmdL1::ComputeFlows() { std::map<Postion, int>::iterator iter_all; int label_now = 0; for (int i = 0; i < flows.size(); i++) { Postion p1, p2; p1.pos[0] = flows[i]->pParent->pos[0]; p1.pos[1] = flows[i]->pParent->pos[1]; p1.pos[2] = flows[i]->pParent->pos[2]; p2.pos[0] = flows[i]->pChild->pos[0]; p2.pos[1] = flows[i]->pChild->pos[1]; p2.pos[2] = flows[i]->pChild->pos[2]; std::pair<Postion, int> pp1(p1, label_now); std::pair<Postion, int> pp2(p2, label_now); std::map<Postion, int>::iterator iter_p1 = AllValidNodes.find(p1); std::map<Postion, int>::iterator iter_p2 = AllValidNodes.find(p2); iter_all = AllValidNodes.begin(); bool flag_p1 = iter_p1 == AllValidNodes.end(); bool flag_p2 = iter_p2 == AllValidNodes.end(); if (flag_p1 && flag_p2) { label_now++; AllValidNodes.insert(pp1); AllValidNodes.insert(pp2); continue; } if (flag_p1 && !flag_p2) { pp1.second = iter_p2->second; AllValidNodes.insert(pp1); continue; } if (!flag_p1 && flag_p2) { pp2.second = iter_p1->second; AllValidNodes.insert(pp2); continue; } if (!flag_p1 && !flag_p2) { if (iter_p1->second == iter_p2->second) continue; for (iter_all = AllValidNodes.begin(); iter_all != AllValidNodes.end(); iter_all++) { if (iter_all->second == iter_p2->second) iter_all->second = iter_p1->second; } continue; } } for (iter_all = AllValidNodes.begin(); iter_all != AllValidNodes.end(); iter_all++) { int index_1; if (m_nDim == 2) index_1 = iter_all->first.pos[0] + iter_all->first.pos[1] * m_n2; else index_1 = iter_all->first.pos[0] + iter_all->first.pos[1] * m_n2 + iter_all->first.pos[2] * m_n2 * m_n3; if (Histg1[index_1] == 0 && Histg2[index_1] == 0) iter_all->second = -1; } /* int index_1, index_2; Postion p1, p2; if (m_nDim == 2) { index_1 = flows[i]->pParent->pos[0] * m_n2 + flows[i]->pParent->pos[1]; index_2 = flows[i]->pChild->pos[0] * m_n2 + flows[i]->pChild->pos[1]; } else { index_1 = flows[i]->pParent->pos[0] * m_n2 * m_n3 + flows[i]->pParent->pos[1] * m_n2 + flows[i]->pParent->pos[2]; index_1 = flows[i]->pChild->pos[0] * m_n2 * m_n3 + flows[i]->pChild->pos[1] * m_n2 + flows[i]->pChild->pos[2]; } p1.dir = 0; p1.dir = 0; if (Histg1[index_1] != 0 || Histg2[index_1] != 0) p1.dir = 1; if (Histg1[index_2] != 0 || Histg2[index_2] != 0) p2.dir = 1; p1.label = -1; p2.label = -1; Flows.resize(1); Flows[0].flow_in.clear(); Flows[0].flow_out.clear(); int flow_index = 0; bool new_flow = true; for (int i = 0; i < flows.size(); i++) { Postion in, out; if (flows[i]->iDir) { in.pos[0] = flows[i]->pParent->pos[0]; in.pos[1] = flows[i]->pParent->pos[1]; in.pos[2] = flows[i]->pParent->pos[2]; out.pos[0] = flows[i]->pChild->pos[0]; out.pos[1] = flows[i]->pChild->pos[1]; out.pos[2] = flows[i]->pChild->pos[2]; } else { out.pos[0] = flows[i]->pParent->pos[0]; out.pos[1] = flows[i]->pParent->pos[1]; out.pos[2] = flows[i]->pParent->pos[2]; in.pos[0] = flows[i]->pChild->pos[0]; in.pos[1] = flows[i]->pChild->pos[1]; in.pos[2] = flows[i]->pChild->pos[2]; } if (new_flow) { Flows[flow_index].flow_in.push_back(in); Flows[flow_index].flow_out.push_back(out); new_flow = false; continue; } std::list<Postion>::iterator iter_in = std::find(Flows[flow_index].flow_in.begin(), Flows[flow_index].flow_in.end(), in); std::list<Postion>::iterator iter_out = std::find(Flows[flow_index].flow_out.begin(), Flows[flow_index].flow_out.end(), out); if (iter_in == Flows[flow_index].flow_in.end() && iter_out == Flows[flow_index].flow_out.end()) { FlowStructure newflow; newflow.flow_in.clear(); newflow.flow_out.clear(); Flows.push_back(newflow); flow_index++; Flows[flow_index].flow_in.push_back(in); Flows[flow_index].flow_out.push_back(out); continue; } if (iter_in != Flows[flow_index].flow_in.end() && iter_out != Flows[flow_index].flow_out.end()) continue; if (iter_in != Flows[flow_index].flow_in.end()) }*/ }
double testPointing(double dtheta = 0, int run = 332, int event = 55448680) // double testPointing(double dtheta = 0, int run = 352, int event = 60832108) { AnitaDataset d(run); d.getEvent(event); UsefulAdu5Pat gps(d.gps()); double wais_phi, wais_theta; gps.getThetaAndPhiWaveWaisDivide(wais_theta, wais_phi); wais_theta += dtheta * TMath::DegToRad(); double rampdem_wais_alt = AnitaLocations::getWaisAltitude(); printf("Real WAIS lat/lon/alt: %g %g %g\n", AnitaLocations::getWaisLatitude(), AnitaLocations::getWaisLongitude(), AnitaLocations::getWaisAltitude()); printf(" According to AnitaGeomTool, WAIS at phi=%g theta=%g\n", wais_phi* TMath::RadToDeg(), wais_theta* TMath::RadToDeg()); PayloadParameters pp0(d.gps(), AntarcticCoord(AntarcticCoord::WGS84, AnitaLocations::getWaisLatitude(), AnitaLocations::getWaisLongitude(), rampdem_wais_alt )); printf(" According to PayloadParameters, wais at phi=%g, theta=%g\n", pp0.source_phi, pp0.source_theta); double lat,lon,alt; int trace = gps.traceBackToContinent(wais_phi, wais_theta, &lon, &lat,&alt,0); printf("traceBackToContent projects to lat/lon/alt: %g %g %g\n",lat,lon,alt); double payload_phi, payload_theta; gps.getThetaAndPhiWave(lon,lat,alt, payload_theta, payload_phi); printf("In payload coordinates that is: phi=%g theta=%g\n", payload_phi * TMath::RadToDeg(), payload_theta * TMath::RadToDeg()); AntarcticCoord c(AntarcticCoord::WGS84,lat,lon,alt); PayloadParameters pp(d.gps(), c); printf("Payload parameters thinks it's at phi=%g, theta=%g\n", pp.source_phi, pp.source_theta); int get = gps.getSourceLonAndLatAtAlt(wais_phi, wais_theta, lon, lat, alt); printf("getSourceLonAndLatAtAlt projects to lat/lon/alt: %g %g %g\n",lat,lon,alt); gps.getThetaAndPhiWave(lon,lat,alt, payload_theta, payload_phi); printf("In payload coordinates that is: phi=%g theta=%g\n", payload_phi * TMath::RadToDeg(), payload_theta * TMath::RadToDeg()); AntarcticCoord c2(AntarcticCoord::WGS84,lat,lon,alt); PayloadParameters pp2(d.gps(), c2); printf("Payload parameters thinks it's at phi=%g, theta=%g\n", pp2.source_phi, pp2.source_theta); PayloadParameters pp3; int success = PayloadParameters::findSourceOnContinent(pp0.source_theta, pp0.source_phi, d.gps(), &pp3); if (success==1) { AntarcticCoord c3 = pp3.source.as(AntarcticCoord::WGS84); printf("findSourceOnContinent projects to lat/lon/alt: %g %g %g\n",c3.x,c3.y,c3.z); printf("Payload parameters thinks it's at phi=%g, theta=%g\n", pp3.source_phi, pp3.source_theta); } else { printf("findSourceOnContinent found no solution :(\n"); } double x0 = pp0.payload.as(AntarcticCoord::STEREOGRAPHIC).x; double y0 = pp0.payload.as(AntarcticCoord::STEREOGRAPHIC).y; TFile * fout = new TFile("refraction.root","RECREATE"); TH2I * old_h = new TH2I("traceBack","TraceBack", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2I * new_h3 = new TH2I("traceBack3","TraceBack3", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2I * new_h = new TH2I("findSource","FindSource", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2I * new_h_col = new TH2I("findSourceColl","FindSourceColl", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2I * new_h_ref = new TH2I("findSourceRef","FindSourceRefract", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2 * old_payload_el = new TProfile2D("traceBackPayloadEl","TraceBackPayloadEl", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2 * new_h3_payload_el = new TProfile2D("traceBack3PayloadEl","TraceBack3PayloadEl", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2 * new_payload_el = new TProfile2D("findSourcePayloadEl","findSourcePayloadEl", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2 * new_payload_el_col = new TProfile2D("findSourcePayloadElCol","findSourcePayloadElCol", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); TH2 * new_payload_el_ref = new TProfile2D("findSourcePayloadElRef","findSourcePayloadElRef", 1000, x0 - 800e3, x0+800e3, 1000, y0 - 800e3, y0+800e3); Refraction::SphRay m; for (double phi = 0; phi <=360; phi+= 0.2) { printf("%g\n",phi); double step = 0.001; for (double sin_theta = 0.0; sin_theta < 0.9; sin_theta+= step) { double theta = asin(sin_theta*sin_theta) * TMath::RadToDeg(); trace = gps.traceBackToContinent(phi*TMath::DegToRad(), theta*TMath::DegToRad(), &lon, &lat,&alt,0); if (trace) { AntarcticCoord w(AntarcticCoord::WGS84,lat,lon,alt); w.to(AntarcticCoord::STEREOGRAPHIC); old_h->Fill(w.x, w.y); PayloadParameters pw(d.gps(), w); old_payload_el->Fill(w.x,w.y, pw.payload_el); } trace = gps.traceBackToContinent3(phi*TMath::DegToRad(), theta*TMath::DegToRad(), &lon, &lat,&alt,0); if (trace) { AntarcticCoord w(AntarcticCoord::WGS84,lat,lon,alt); w.to(AntarcticCoord::STEREOGRAPHIC); new_h3->Fill(w.x, w.y); PayloadParameters pw(d.gps(), w); new_h3_payload_el->Fill(w.x,w.y, pw.payload_el); } PayloadParameters::findSourceOnContinent(theta,phi, d.gps(), &pp3); AntarcticCoord w = pp3.source.as(AntarcticCoord::STEREOGRAPHIC); new_h->Fill(w.x,w.y); new_payload_el->Fill(w.x,w.y, pp3.payload_el); PayloadParameters::findSourceOnContinent(theta,phi, d.gps(), &pp3,0, 50); w = pp3.source.as(AntarcticCoord::STEREOGRAPHIC); new_h_col->Fill(w.x,w.y); new_payload_el_col->Fill(w.x,w.y, pp3.payload_el); PayloadParameters::findSourceOnContinent(theta,phi, d.gps(), &pp3,&m); w = pp3.source.as(AntarcticCoord::STEREOGRAPHIC); new_h_ref->Fill(w.x,w.y); new_payload_el_ref->Fill(w.x,w.y, pp3.payload_el); } } TCanvas * cc = new TCanvas; cc->Divide(5,2); cc->cd(1); old_h->Draw("colz"); cc->cd(2); new_h->Draw("colz"); cc->cd(3); new_h_col->Draw("colz"); cc->cd(4); new_h_ref->Draw("colz"); cc->cd(5); new_h3->Draw("colz"); cc->cd(6); old_payload_el->Draw("colz"); cc->cd(7); new_payload_el->Draw("colz"); cc->cd(8); new_payload_el_col->Draw("colz"); cc->cd(9); new_payload_el_ref->Draw("colz"); cc->cd(10); new_h3_payload_el->Draw("colz"); cc->SaveAs("refraction.pdf"); fout->cd(); old_h->Write(); new_h->Write(); new_h_col->Write(); new_h_ref->Write(); old_payload_el->Write(); new_payload_el->Write(); new_payload_el_col->Write(); new_payload_el_ref->Write(); return wais_phi * TMath::RadToDeg() - pp0.source_phi; }
void PyHelpersTest::RunTests() { // Test py::Ptr construction { { // NULL pointer PyObject * p = NULL; SHOULDFAIL(py::Ptr(p, /* allowNULL: */false)); py::Ptr pp1(p, /* allowNULL: */true); TEST((PyObject *)pp1 == NULL); TEST(pp1.isNULL()); } // Non-NULL pointer { PyObject * p = PyTuple_New(1); py::Ptr pp2(p); TEST(!pp2.isNULL()); TEST((PyObject *)pp2 == p); pp2.release(); TEST(pp2.isNULL()); Py_DECREF(p); } // assign { PyObject * p = PyTuple_New(1); TEST(p->ob_refcnt == 1); py::Ptr pp(NULL, /* allowNULL */ true); TEST(pp.isNULL()); NTA_DEBUG << "*** Before assign"; pp.assign(p); NTA_DEBUG << "*** After assign"; TEST(p->ob_refcnt == 2); TEST(!(pp.isNULL())); Py_DECREF(p); TEST(p->ob_refcnt == 1); } } // py::String { py::String ps1(std::string("123")); TEST(PyString_Check(ps1) != 0); py::String ps2("123", size_t(3)); TEST(PyString_Check(ps2) != 0); py::String ps3("123"); TEST(PyString_Check(ps3) != 0); std::string s1(PyString_AsString(ps1)); std::string s2(PyString_AsString(ps2)); std::string s3(PyString_AsString(ps3)); std::string expected("123"); TEST(s1 == expected); TEST(s2 == expected); TEST(s3 == expected); TEST(std::string(ps1) == expected); TEST(std::string(ps2) == expected); TEST(std::string(ps3) == expected); PyObject * p = PyString_FromString("777"); py::String ps4(p); TEST(std::string(ps4) == std::string("777")); } // py::Int { py::Int n1(-5); py::Int n2(-6666); py::Int n3(long(0)); py::Int n4(555); py::Int n5(6666); TEST(n1 == -5); int x = n2; int expected = -6666; TEST(x == expected); TEST(n3 == 0); TEST(n4 == 555); x = n5; expected = 6666; TEST(x == expected); } // py::Long { py::Long n1(-5); py::Long n2(-66666666); py::Long n3(long(0)); py::Long n4(555); py::Long n5(66666666); TEST(n1 == -5); long x = n2; long expected = -66666666; TEST(x == expected); TEST(n3 == 0); TEST(n4 == 555); x = n5; expected = 66666666; TEST(x == expected); } // py::UnsignedLong { py::UnsignedLong n1((unsigned long)(-5)); py::UnsignedLong n2((unsigned long)(-66666666)); py::UnsignedLong n3((unsigned long)(0)); py::UnsignedLong n4(555); py::UnsignedLong n5(66666666); TEST(n1 == (unsigned long)(-5)); TEST(n2 == (unsigned long)(-66666666)); TEST(n3 == 0); TEST(n4 == 555); TEST(n5 == 66666666); } // py::Float { TEST(py::Float::getMax() == std::numeric_limits<double>::max()); TEST(py::Float::getMin() == std::numeric_limits<double>::min()); py::Float max(std::numeric_limits<double>::max()); py::Float min(std::numeric_limits<double>::min()); py::Float n1(-0.5); py::Float n2(double(0)); py::Float n3(333.555); py::Float n4(0.02); py::Float n5("0.02"); TEST(max == py::Float::getMax()); TEST(min == py::Float::getMin()); TEST(n1 == -0.5); TEST(n2 == 0); TEST(n3 == 333.555); TEST(n4 == 0.02); TEST(n5 == 0.02); } // py::Tuple { py::String s1("item_1"); py::String s2("item_2"); // Empty tuple { py::Tuple empty; TEST(PyTuple_Check(empty) != 0); TEST(empty.getCount() == 0); SHOULDFAIL(empty.setItem(0, s1)); SHOULDFAIL(empty.getItem(0)); } // One item tuple { py::Tuple t1(1); TEST(PyTuple_Check(t1) != 0); TEST(t1.getCount() == 1); t1.setItem(0, s1); py::String item1(t1.getItem(0)); TEST(std::string(item1) == std::string(s1)); py::String fastItem1(t1.fastGetItem(0)); TEST(std::string(fastItem1) == std::string(s1)); fastItem1.release(); SHOULDFAIL(t1.setItem(1, s2)); SHOULDFAIL(t1.getItem(1)); TEST(t1.getCount() == 1); } // 2 items tuple { py::Tuple t2(2); TEST(PyTuple_Check(t2) != 0); TEST(t2.getCount() == 2); t2.setItem(0, s1); py::String item1(t2.getItem(0)); TEST(std::string(item1) == std::string(s1)); py::String fastItem1(t2.fastGetItem(0)); TEST(std::string(fastItem1) == std::string(s1)); fastItem1.release(); t2.setItem(1, s2); py::String item2(t2.getItem(1)); TEST(std::string(item2) == std::string(s2)); py::String fastItem2(t2.fastGetItem(1)); TEST(std::string(fastItem2) == std::string(s2)); fastItem2.release(); SHOULDFAIL(t2.setItem(2, s2)); SHOULDFAIL(t2.getItem(2)); TEST(t2.getCount() == 2); } } // py::List { py::String s1("item_1"); py::String s2("item_2"); // Empty list { py::List empty; TEST(PyList_Check(empty) != 0); TEST(empty.getCount() == 0); SHOULDFAIL(empty.setItem(0, s1)); SHOULDFAIL(empty.getItem(0)); } // One item list { py::List t1; TEST(PyList_Check(t1) != 0); TEST(t1.getCount() == 0); t1.append(s1); py::String item1(t1.getItem(0)); TEST(std::string(item1) == std::string(s1)); py::String fastItem1(t1.fastGetItem(0)); TEST(std::string(fastItem1) == std::string(s1)); fastItem1.release(); TEST(t1.getCount() == 1); TEST(std::string(item1) == std::string(s1)); SHOULDFAIL(t1.getItem(1)); } // Two items list { py::List t2; TEST(PyList_Check(t2) != 0); TEST(t2.getCount() == 0); t2.append(s1); py::String item1(t2.getItem(0)); TEST(std::string(item1) == std::string(s1)); py::String fastItem1(t2.fastGetItem(0)); TEST(std::string(fastItem1) == std::string(s1)); fastItem1.release(); t2.append(s2); TEST(t2.getCount() == 2); py::String item2(t2.getItem(1)); TEST(std::string(item2) == std::string(s2)); py::String fastItem2(t2.fastGetItem(1)); TEST(std::string(fastItem2) == std::string(s2)); fastItem2.release(); SHOULDFAIL(t2.getItem(2)); } } // py::Dict { // Empty dict { py::Dict d; TEST(PyDict_Size(d) == 0); TEST(d.getItem("blah") == NULL); } // Failed External PyObject * { // NULL object SHOULDFAIL(py::Dict(NULL)); // Wrong type (must be a dictionary) py::String s("1234"); try { py::Dict d(s.release()); NTA_THROW << "py::Dict d(s) Should fail!!!"; } catch(...) { } // SHOULDFAIL fails to fail :-) //SHOULDFAIL(py::Dict(s)); } // Successful external PyObject * { PyObject * p = PyDict_New(); PyDict_SetItem(p, py::String("1234"), py::String("5678")); py::Dict d(p); TEST(PyDict_Contains(d, py::String("1234")) == 1); PyDict_SetItem(d, py::String("777"), py::String("999")); TEST(PyDict_Contains(d, py::String("777")) == 1); } // getItem with default (exisiting and non-exisitng key) { py::Dict d; d.setItem("A", py::String("AAA")); PyObject * defaultItem = (PyObject *)123; py::String A(d.getItem("A")); TEST(std::string(A) == std::string("AAA")); // No "B" in the dict, so expect to get the default item PyObject * B = (d.getItem("B", defaultItem)); TEST(B == defaultItem); PyDict_SetItem(d, py::String("777"), py::String("999")); TEST(PyDict_Contains(d, py::String("777")) == 1); } //NTA_DEBUG << ss << ": " << ss->ob_refcnt; } // py::Module { py::Module module("sys"); TEST(std::string(PyModule_GetName(module)) == std::string("sys")); } // py::Class { py::Class c("datetime", "date"); } // py::Instance { py::Tuple args(3); args.setItem(0, py::Long(2000)); args.setItem(1, py::Long(11)); args.setItem(2, py::Long(5)); py::Instance date("datetime", "date", args, py::Dict()); // Test invoke() { py::String result(date.invoke("__str__", py::Tuple(), py::Dict())); std::string res((const char *)result); std::string expected("2000-11-05"); TEST(res == expected); } // Test hasAttr() { py::String result(date.invoke("__str__", py::Tuple(), py::Dict())); std::string res((const char *)result); std::string expected("2000-11-05"); TEST(!(date.hasAttr("No such attribute"))); TEST(date.hasAttr("year")); } // Test getAttr() { py::Int year(date.getAttr("year")); TEST(2000 == long(year)); } // Test toString() { std::string res((const char *)py::String(date.toString())); std::string expected("2000-11-05"); TEST(res == expected); } } // Test custom exception { py::Tuple args(1); args.setItem(0, py::String("error message!")); py::Instance e(PyExc_RuntimeError, args); e.setAttr("traceback", py::String("traceback!!!")); PyErr_SetObject(PyExc_RuntimeError, e); try { py::checkPyError(0); } catch (const nta::Exception & e) { NTA_DEBUG << e.getMessage(); } } }
void TextLineBaseSegment::layout() { npoints = 0; TextLineBase* tl = textLineBase(); qreal _spatium = spatium(); if (!tl->diagonal()) _userOff2.setY(0); switch (spannerSegmentType()) { case SpannerSegmentType::SINGLE: case SpannerSegmentType::BEGIN: _text->setXmlText(tl->beginText()); _text->setFamily(tl->beginFontFamily()); _text->setSize(tl->beginFontSize()); _text->setOffset(tl->beginTextOffset()); _text->setAlign(tl->beginTextAlign()); break; case SpannerSegmentType::MIDDLE: case SpannerSegmentType::END: _text->setXmlText(tl->continueText()); _text->setFamily(tl->continueFontFamily()); _text->setSize(tl->continueFontSize()); _text->setOffset(tl->continueTextOffset()); _text->setAlign(tl->continueTextAlign()); break; } _text->setTrack(track()); _text->layout(); if ((isSingleType() || isEndType())) { _endText->setXmlText(tl->endText()); _endText->setFamily(tl->endFontFamily()); _endText->setSize(tl->endFontSize()); _endText->setOffset(tl->endTextOffset()); _endText->setAlign(tl->endTextAlign()); _endText->setTrack(track()); _endText->layout(); } else { _endText->setXmlText(""); } QPointF pp1; QPointF pp2(pos2()); // diagonal line with no text - just use the basic rectangle for line (ignore hooks) if (_text->empty() && _endText->empty() && pp2.y() != 0) { npoints = 2; points[0] = pp1; points[1] = pp2; setbbox(QRectF(pp1, pp2).normalized()); return; } // line has text or is not diagonal - calculate reasonable bbox qreal x1 = qMin(0.0, pp2.x()); qreal x2 = qMax(0.0, pp2.x()); qreal y0 = point(-textLineBase()->lineWidth()); qreal y1 = qMin(0.0, pp2.y()) + y0; qreal y2 = qMax(0.0, pp2.y()) - y0; qreal l = 0.0; if (!_text->empty()) { qreal textlineTextDistance = _spatium * .5; if (((isSingleType() || isBeginType()) && (tl->beginTextPlace() == PlaceText::LEFT)) || ((isMiddleType() || isEndType()) && (tl->continueTextPlace() == PlaceText::LEFT))) l = _text->pos().x() + _text->bbox().width() + textlineTextDistance; qreal h = _text->height(); if (textLineBase()->beginTextPlace() == PlaceText::ABOVE) y1 = qMin(y1, -h); else if (textLineBase()->beginTextPlace() == PlaceText::BELOW) y2 = qMax(y2, h); else { y1 = qMin(y1, -h * .5); y2 = qMax(y2, h * .5); } x2 = qMax(x2, _text->width()); } if (textLineBase()->endHookType() != HookType::NONE) { qreal h = pp2.y() + point(textLineBase()->endHookHeight()); if (h > y2) y2 = h; else if (h < y1) y1 = h; } if (textLineBase()->beginHookType() != HookType::NONE) { qreal h = point(textLineBase()->beginHookHeight()); if (h > y2) y2 = h; else if (h < y1) y1 = h; } bbox().setRect(x1, y1, x2 - x1, y2 - y1); if (!_text->empty()) bbox() |= _text->bbox().translated(_text->pos()); // DEBUG // set end text position and extend bbox if (!_endText->empty()) { _endText->setPos(bbox().right(), 0); bbox() |= _endText->bbox().translated(_endText->pos()); } if (!(tl->lineVisible() || score()->showInvisible())) return; if (tl->lineVisible() || !score()->printing()) { QPointF pp1(l, 0.0); qreal beginHookWidth; qreal endHookWidth; if (tl->beginHookType() == HookType::HOOK_45) { beginHookWidth = fabs(tl->beginHookHeight().val() * _spatium * .4); pp1.rx() += beginHookWidth; } else beginHookWidth = 0; if (tl->endHookType() == HookType::HOOK_45) { endHookWidth = fabs(tl->endHookHeight().val() * _spatium * .4); pp2.rx() -= endHookWidth; } else endHookWidth = 0; // don't draw backwards lines (or hooks) if text is longer than nominal line length bool backwards = !_text->empty() && pp1.x() > pp2.x() && !tl->diagonal(); if ((tl->beginHookType() != HookType::NONE) && (isSingleType() || isBeginType())) { qreal hh = tl->beginHookHeight().val() * _spatium; points[npoints] = QPointF(pp1.x() - beginHookWidth, pp1.y() + hh); ++npoints; points[npoints] = pp1; } if (!backwards) { points[npoints] = pp1; ++npoints; points[npoints] = pp2; // painter->drawLine(QLineF(pp1.x(), pp1.y(), pp2.x(), pp2.y())); if ((tl->endHookType() != HookType::NONE) && (isSingleType() || isEndType())) { ++npoints; qreal hh = tl->endHookHeight().val() * _spatium; // painter->drawLine(QLineF(pp2.x(), pp2.y(), pp2.x() + endHookWidth, pp2.y() + hh)); points[npoints] = QPointF(pp2.x() + endHookWidth, pp2.y() + hh); } } } }