Skip to content

Commit a143845

Browse files
committed
Tests: various minor improvements.
1 parent a7e4f62 commit a143845

39 files changed

+1729
-1294
lines changed

tests/bindings/python/test_generator_profile.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def test_acoth_function_string(self):
162162
g = GeneratorProfile()
163163

164164
self.assertEqual(
165-
'double acoth(double x)\n{\n double oneOverX = 1.0/x;\n\n return 0.5*log((1.0+oneOverX)/(1.0-oneOverX));\n}\n',
165+
'double acoth(double x)\n{\n return atanh(1.0/x);\n}\n',
166166
g.acothFunctionString())
167167
g.setAcothFunctionString(GeneratorProfileTestCase.VALUE)
168168
self.assertEqual(GeneratorProfileTestCase.VALUE, g.acothFunctionString())
@@ -200,7 +200,7 @@ def test_acsch_function_string(self):
200200
g = GeneratorProfile()
201201

202202
self.assertEqual(
203-
'double acsch(double x)\n{\n double oneOverX = 1.0/x;\n\n return log(oneOverX+sqrt(oneOverX*oneOverX+1.0));\n}\n',
203+
'double acsch(double x)\n{\n return asinh(1.0/x);\n}\n',
204204
g.acschFunctionString())
205205
g.setAcschFunctionString(GeneratorProfileTestCase.VALUE)
206206
self.assertEqual(GeneratorProfileTestCase.VALUE, g.acschFunctionString())
@@ -265,7 +265,7 @@ def test_asech_function_string(self):
265265
g = GeneratorProfile()
266266

267267
self.assertEqual(
268-
'double asech(double x)\n{\n double oneOverX = 1.0/x;\n\n return log(oneOverX+sqrt(oneOverX*oneOverX-1.0));\n}\n',
268+
'double asech(double x)\n{\n return acosh(1.0/x);\n}\n',
269269
g.asechFunctionString())
270270
g.setAsechFunctionString(GeneratorProfileTestCase.VALUE)
271271
self.assertEqual(GeneratorProfileTestCase.VALUE, g.asechFunctionString())
@@ -1285,7 +1285,7 @@ def test_max_function_string(self):
12851285

12861286
g = GeneratorProfile()
12871287

1288-
self.assertEqual('double max(double x, double y)\n{\n return (x > y)?x:y;\n}\n', g.maxFunctionString())
1288+
self.assertEqual('', g.maxFunctionString())
12891289
g.setMaxFunctionString(GeneratorProfileTestCase.VALUE)
12901290
self.assertEqual(GeneratorProfileTestCase.VALUE, g.maxFunctionString())
12911291

@@ -1294,7 +1294,7 @@ def test_max_string(self):
12941294

12951295
g = GeneratorProfile()
12961296

1297-
self.assertEqual('max', g.maxString())
1297+
self.assertEqual('fmax', g.maxString())
12981298
g.setMaxString(GeneratorProfileTestCase.VALUE)
12991299
self.assertEqual(GeneratorProfileTestCase.VALUE, g.maxString())
13001300

@@ -1303,7 +1303,7 @@ def test_min_function_string(self):
13031303

13041304
g = GeneratorProfile()
13051305

1306-
self.assertEqual('double min(double x, double y)\n{\n return (x < y)?x:y;\n}\n', g.minFunctionString())
1306+
self.assertEqual('', g.minFunctionString())
13071307
g.setMinFunctionString(GeneratorProfileTestCase.VALUE)
13081308
self.assertEqual(GeneratorProfileTestCase.VALUE, g.minFunctionString())
13091309

@@ -1312,7 +1312,7 @@ def test_min_string(self):
13121312

13131313
g = GeneratorProfile()
13141314

1315-
self.assertEqual('min', g.minString())
1315+
self.assertEqual('fmin', g.minString())
13161316
g.setMinString(GeneratorProfileTestCase.VALUE)
13171317
self.assertEqual(GeneratorProfileTestCase.VALUE, g.minString())
13181318

tests/coverage/coverage.cpp

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -597,10 +597,10 @@ TEST(Coverage, generator)
597597

598598
EXPECT_EQ(size_t(1), analyserModel->stateCount());
599599
EXPECT_EQ(size_t(7), analyserModel->constantCount());
600-
EXPECT_EQ(size_t(199), analyserModel->computedConstantCount());
601-
EXPECT_EQ(size_t(2), analyserModel->algebraicCount());
600+
EXPECT_EQ(size_t(207), analyserModel->computedConstantCount());
601+
EXPECT_EQ(size_t(5), analyserModel->algebraicCount());
602602
EXPECT_EQ(size_t(1), analyserModel->externalCount());
603-
EXPECT_EQ(size_t(203), analyserModel->equationCount());
603+
EXPECT_EQ(size_t(214), analyserModel->equationCount());
604604

605605
EXPECT_NE(nullptr, analyserModel->voi());
606606
EXPECT_EQ(size_t(0), analyserModel->voi()->equationCount());
@@ -627,6 +627,7 @@ TEST(Coverage, generator)
627627
EXPECT_EQ(size_t(1), analyserModel->equation(0)->states().size());
628628
EXPECT_NE(nullptr, analyserModel->equation(0)->state(0));
629629
EXPECT_EQ(nullptr, analyserModel->equation(0)->state(analyserModel->equation(0)->stateCount()));
630+
/*---GRY--- STILL NEEDED?
630631
EXPECT_NE(nullptr, analyserModel->equation(199));
631632
EXPECT_NE(size_t(0), analyserModel->equation(199)->dependencyCount());
632633
EXPECT_NE(size_t(0), analyserModel->equation(199)->dependencies().size());
@@ -649,6 +650,7 @@ TEST(Coverage, generator)
649650
EXPECT_EQ(nullptr, analyserModel->equation(199)->external(0));
650651
EXPECT_EQ(nullptr, analyserModel->equation(199)->external(analyserModel->equation(199)->externalCount()));
651652
EXPECT_EQ(nullptr, analyserModel->equation(analyserModel->equationCount()));
653+
*/
652654

653655
for (const auto &equation : analyserModel->equations()) {
654656
checkAstTypeAsString(equation->ast());
@@ -666,9 +668,11 @@ TEST(Coverage, generator)
666668
EXPECT_NE(nullptr, analyserModel->constant(i)->initialisingVariable());
667669
}
668670

671+
/*---GRY--- STILL NEEDED?
669672
for (size_t i = 0; i < analyserModel->algebraicCount(); ++i) {
670673
EXPECT_NE(nullptr, analyserModel->algebraic(i)->initialisingVariable());
671674
}
675+
*/
672676

673677
EXPECT_EQ(nullptr, generator->model());
674678
EXPECT_EQ(EMPTY_STRING, generator->interfaceCode());
@@ -682,20 +686,14 @@ TEST(Coverage, generator)
682686

683687
auto profile = generator->profile();
684688

685-
profile->setInterfaceCreateStatesArrayMethodString("double * createStatesVector();\n");
686-
profile->setImplementationCreateStatesArrayMethodString("double * createStatesVector()\n"
687-
"{\n"
688-
" double *res = (double *) malloc(STATE_COUNT*sizeof(double));\n"
689-
"\n"
690-
" for (size_t i = 0; i < STATE_COUNT; ++i) {\n"
691-
" res[i] = NAN;\n"
692-
" }\n"
693-
"\n"
694-
" return res;\n"
695-
"}\n");
696-
697-
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.modified.profile.h", generator->interfaceCode());
698-
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.modified.profile.c", generator->implementationCode());
689+
profile->setXorString("XOR");
690+
profile->setXorFunctionString("double XOR(double x, double y)\n"
691+
"{\n"
692+
" return (x != 0.0) ^ (y != 0.0);\n"
693+
"}\n");
694+
695+
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.xor.h", generator->interfaceCode());
696+
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.xor.c", generator->implementationCode());
699697

700698
profile = libcellml::GeneratorProfile::create();
701699

@@ -847,12 +845,13 @@ TEST(Coverage, generator)
847845
EXPECT_EQ(EMPTY_STRING, generator->interfaceCode());
848846
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.py", generator->implementationCode());
849847

850-
profile->setImplementationCreateStatesArrayMethodString("\n"
851-
"def create_states_vector():\n"
852-
" return [nan]*STATE_COUNT\n");
848+
profile->setXorString("XOR_FUNC");
849+
profile->setXorFunctionString("\n"
850+
"def XOR_FUNC(x, y):\n"
851+
" return 1.0 if bool(x) ^ bool(y) else 0.0\n");
853852

854853
EXPECT_EQ(EMPTY_STRING, generator->interfaceCode());
855-
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.modified.profile.py", generator->implementationCode());
854+
EXPECT_EQ_FILE_CONTENTS("coverage/generator/model.xor.py", generator->implementationCode());
856855

857856
// Coverage for the case where mProfile is equal to nullptr in Generator.
858857

tests/generator/generator.cpp

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,7 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952)
12031203
TEST(Generator, hodgkinHuxleySquidAxonModel1952UnknownVarsOnRhs)
12041204
{
12051205
auto parser = libcellml::Parser::create();
1206-
auto model = parser->parseModel(fileContents("generator/hodgkin_huxley_squid_axon_model_1952/model_unknown_vars_on_rhs.cellml"));
1206+
auto model = parser->parseModel(fileContents("generator/hodgkin_huxley_squid_axon_model_1952/model.unknown.vars.on.rhs.cellml"));
12071207

12081208
EXPECT_EQ(size_t(0), parser->issueCount());
12091209

@@ -1253,16 +1253,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithStateVariableAsExternalVariab
12531253

12541254
auto profile = generator->profile();
12551255

1256-
profile->setInterfaceFileNameString("model.state.h");
1256+
profile->setInterfaceFileNameString("model.state.external.h");
12571257

1258-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.state.h", generator->interfaceCode());
1259-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.state.c", generator->implementationCode());
1258+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.state.external.h", generator->interfaceCode());
1259+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.state.external.c", generator->implementationCode());
12601260

12611261
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
12621262

12631263
generator->setProfile(profile);
12641264

1265-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.state.py", generator->implementationCode());
1265+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.state.external.py", generator->implementationCode());
12661266
}
12671267

12681268
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithStateVariablesAsExternalVariablesIncludingOneDependingOnTheOther)
@@ -1297,16 +1297,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithStateVariablesAsExternalVaria
12971297

12981298
auto profile = generator->profile();
12991299

1300-
profile->setInterfaceFileNameString("model.dependent.state.h");
1300+
profile->setInterfaceFileNameString("model.dependent.state.external.h");
13011301

1302-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.state.h", generator->interfaceCode());
1303-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.state.c", generator->implementationCode());
1302+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.state.external.h", generator->interfaceCode());
1303+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.state.external.c", generator->implementationCode());
13041304

13051305
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
13061306

13071307
generator->setProfile(profile);
13081308

1309-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.state.py", generator->implementationCode());
1309+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.state.external.py", generator->implementationCode());
13101310
}
13111311

13121312
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithConstantAsExternalVariable)
@@ -1334,16 +1334,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithConstantAsExternalVariable)
13341334

13351335
auto profile = generator->profile();
13361336

1337-
profile->setInterfaceFileNameString("model.constant.h");
1337+
profile->setInterfaceFileNameString("model.constant.external.h");
13381338

1339-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.constant.h", generator->interfaceCode());
1340-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.constant.c", generator->implementationCode());
1339+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.constant.external.h", generator->interfaceCode());
1340+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.constant.external.c", generator->implementationCode());
13411341

13421342
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
13431343

13441344
generator->setProfile(profile);
13451345

1346-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.constant.py", generator->implementationCode());
1346+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.constant.external.py", generator->implementationCode());
13471347
}
13481348

13491349
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithConstantsAsExternalVariablesIncludingOneDependingOnTheOther)
@@ -1377,16 +1377,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithConstantsAsExternalVariablesI
13771377

13781378
auto profile = generator->profile();
13791379

1380-
profile->setInterfaceFileNameString("model.dependent.constant.h");
1380+
profile->setInterfaceFileNameString("model.dependent.constant.external.h");
13811381

1382-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.constant.h", generator->interfaceCode());
1383-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.constant.c", generator->implementationCode());
1382+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.constant.external.h", generator->interfaceCode());
1383+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.constant.external.c", generator->implementationCode());
13841384

13851385
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
13861386

13871387
generator->setProfile(profile);
13881388

1389-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.constant.py", generator->implementationCode());
1389+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.constant.external.py", generator->implementationCode());
13901390
}
13911391

13921392
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithComputedConstantAsExternalVariable)
@@ -1414,16 +1414,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithComputedConstantAsExternalVar
14141414

14151415
auto profile = generator->profile();
14161416

1417-
profile->setInterfaceFileNameString("model.computed.constant.h");
1417+
profile->setInterfaceFileNameString("model.computed.constant.external.h");
14181418

1419-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.computed.constant.h", generator->interfaceCode());
1420-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.computed.constant.c", generator->implementationCode());
1419+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.computed.constant.external.h", generator->interfaceCode());
1420+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.computed.constant.external.c", generator->implementationCode());
14211421

14221422
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
14231423

14241424
generator->setProfile(profile);
14251425

1426-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.computed.constant.py", generator->implementationCode());
1426+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.computed.constant.external.py", generator->implementationCode());
14271427
}
14281428

14291429
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithComputedConstantsAsExternalVariablesIncludingOneDependingOnTheOther)
@@ -1457,16 +1457,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithComputedConstantsAsExternalVa
14571457

14581458
auto profile = generator->profile();
14591459

1460-
profile->setInterfaceFileNameString("model.dependent.computed.constant.h");
1460+
profile->setInterfaceFileNameString("model.dependent.computed.constant.external.h");
14611461

1462-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.computed.constant.h", generator->interfaceCode());
1463-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.computed.constant.c", generator->implementationCode());
1462+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.computed.constant.external.h", generator->interfaceCode());
1463+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.computed.constant.external.c", generator->implementationCode());
14641464

14651465
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
14661466

14671467
generator->setProfile(profile);
14681468

1469-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.computed.constant.py", generator->implementationCode());
1469+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.computed.constant.external.py", generator->implementationCode());
14701470
}
14711471

14721472
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithAlgebraicVariableAsExternalVariable)
@@ -1494,16 +1494,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithAlgebraicVariableAsExternalVa
14941494

14951495
auto profile = generator->profile();
14961496

1497-
profile->setInterfaceFileNameString("model.algebraic.h");
1497+
profile->setInterfaceFileNameString("model.algebraic.external.h");
14981498

1499-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.algebraic.h", generator->interfaceCode());
1500-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.algebraic.c", generator->implementationCode());
1499+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.algebraic.external.h", generator->interfaceCode());
1500+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.algebraic.external.c", generator->implementationCode());
15011501

15021502
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
15031503

15041504
generator->setProfile(profile);
15051505

1506-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.algebraic.py", generator->implementationCode());
1506+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.algebraic.external.py", generator->implementationCode());
15071507
}
15081508

15091509
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithAlgebraicVariablesAsExternalVariablesIncludingOneDependingOnTheOther)
@@ -1537,16 +1537,16 @@ TEST(Generator, hodgkinHuxleySquidAxonModel1952WithAlgebraicVariablesAsExternalV
15371537

15381538
auto profile = generator->profile();
15391539

1540-
profile->setInterfaceFileNameString("model.dependent.algebraic.h");
1540+
profile->setInterfaceFileNameString("model.dependent.algebraic.external.h");
15411541

1542-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.algebraic.h", generator->interfaceCode());
1543-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.algebraic.c", generator->implementationCode());
1542+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.algebraic.external.h", generator->interfaceCode());
1543+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.algebraic.external.c", generator->implementationCode());
15441544

15451545
profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
15461546

15471547
generator->setProfile(profile);
15481548

1549-
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.algebraic.py", generator->implementationCode());
1549+
EXPECT_EQ_FILE_CONTENTS("generator/hodgkin_huxley_squid_axon_model_1952/model.dependent.algebraic.external.py", generator->implementationCode());
15501550
}
15511551

15521552
TEST(Generator, hodgkinHuxleySquidAxonModel1952WithVariousExternalVariables)
@@ -1972,6 +1972,9 @@ TEST(Generator, modelWithComplexUnitsOutOfScope)
19721972

19731973
generator->setModel(analyserModel);
19741974

1975+
EXPECT_EQ_FILE_CONTENTS("generator/cellml_slc_example/model.h", generator->interfaceCode());
1976+
EXPECT_EQ_FILE_CONTENTS("generator/cellml_slc_example/model.c", generator->implementationCode());
1977+
19751978
auto profile = libcellml::GeneratorProfile::create(libcellml::GeneratorProfile::Profile::PYTHON);
19761979

19771980
generator->setProfile(profile);

0 commit comments

Comments
 (0)