From 0a248830202e0dd6153811790d2c52125f1c6b5c Mon Sep 17 00:00:00 2001 From: Clemens Zeidler Date: Thu, 14 Jul 2011 07:19:30 +0000 Subject: [PATCH] Fix linprog tests and add some more smaller test cases. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42423 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/tests/libs/linprog/Jamfile | 4 +- src/tests/libs/linprog/Program.cpp | 109 ++++++++++++++++++++++------- 2 files changed, 86 insertions(+), 27 deletions(-) diff --git a/src/tests/libs/linprog/Jamfile b/src/tests/libs/linprog/Jamfile index 871e2df3b1..1d544391f6 100644 --- a/src/tests/libs/linprog/Jamfile +++ b/src/tests/libs/linprog/Jamfile @@ -1,11 +1,11 @@ SubDir HAIKU_TOP src tests libs linprog ; -SetSubDirSupportedPlatformsBeOSCompatible ; UseLibraryHeaders lp_solve linprog ; + SimpleTest linprog_test : Program.cpp : - be liblpsolve55.so liblinprog.so $(TARGET_LIBSUPC++) + be liblpsolve55.so linprog.a $(TARGET_LIBSUPC++) $(TARGET_LIBSTDC++) ; diff --git a/src/tests/libs/linprog/Program.cpp b/src/tests/libs/linprog/Program.cpp index a8e6bc5f61..ec5789455b 100644 --- a/src/tests/libs/linprog/Program.cpp +++ b/src/tests/libs/linprog/Program.cpp @@ -12,44 +12,101 @@ #include +using namespace LinearProgramming; + + void -PrintVars(LinearSpec* ls) +PrintResults(const VariableList& list) { - int32 size = ls->Variables()->CountItems(); - Variable* variable; - for (int i = 0; i < size; i++) { - variable = (Variable*)ls->Variables()->ItemAt(i); - printf("%f ", variable->Value()); - } - printf("%d\n", ls->Result()); + for (int32 i = 0; i < list.CountItems(); i++) + printf("Variable %i = %f\n", (int)i, list.ItemAt(i)->Value()); } void Test1() { - LinearSpec* ls = new LinearSpec(); - Variable* x1 = ls->AddVariable(); - Variable* x2 = ls->AddVariable(); + LinearSpec ls; + Variable* x1 = ls.AddVariable(); + Variable* x2 = ls.AddVariable(); - Constraint* c1 = ls->AddConstraint(1.0, x1, OperatorType(LE), 108); - Constraint* c2 = ls->AddConstraint(1.0, x2, OperatorType(GE), 113); + Constraint* c1 = ls.AddConstraint(1.0, x1, OperatorType(kLE), 108); + Constraint* c2 = ls.AddConstraint(1.0, x2, OperatorType(kGE), 113); - BList* summands = new BList(2); - summands->AddItem(new Summand(1.0, x1)); - summands->AddItem(new Summand(1.0, x2)); - ls->SetObjFunction(summands); + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); - ls->Solve(); - PrintVars(ls); + ls.RemoveConstraint(c2); + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); + + c2 = ls.AddConstraint(1.0, x2, OperatorType(kGE), 113); + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); +} + + +void +SoftConstraints() +{ + printf("SoftConstraints\n\n"); + + LinearSpec ls; + Variable* x1 = ls.AddVariable(); + x1->SetLabel("label_x1"); + Variable* x2 = ls.AddVariable(); + x2->SetLabel("label_x2"); + Variable* x3 = ls.AddVariable(); + x3->SetLabel("label_x3"); + + Constraint* c1 = ls.AddConstraint(1, x1, kEQ, 0); + Constraint* c2 = ls.AddConstraint(1, x1, -1, x2, kLE, 0); + Constraint* c3 = ls.AddConstraint(1, x2, -1, x3, kLE, 0); + Constraint* c4 = ls.AddConstraint(1, x3, -1, x1, kEQ, 20); - delete c2; - ls->Solve(); - PrintVars(ls); + Constraint* c5 = ls.AddConstraint(1, x2, -1, x1, kEQ, 10, 5, 5); + Constraint* c6 = ls.AddConstraint(1, x3, -1, x2, kEQ, 5, 5, 5); + + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); + PrintResults(ls.AllVariables()); + + ls.RemoveConstraint(c6); + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); + PrintResults(ls.UsedVariables()); +} + + +void +SoftInequalityConstraints() +{ + printf("SoftInequalityConstraints\n\n"); + + LinearSpec ls; + Variable* x1 = ls.AddVariable(); + x1->SetLabel("label_x1"); + Variable* x2 = ls.AddVariable(); + x2->SetLabel("label_x2"); + Variable* x3 = ls.AddVariable(); + x3->SetLabel("label_x3"); + + Constraint* c1 = ls.AddConstraint(1, x1, kEQ, 0); + Constraint* c2 = ls.AddConstraint(1, x1, -1, x2, kLE, 0); + Constraint* c3 = ls.AddConstraint(1, x2, -1, x3, kLE, 0); + Constraint* c4 = ls.AddConstraint(1, x3, -1, x1, kEQ, 20); - c2 = ls->AddConstraint(1.0, x2, OperatorType(GE), 113); - ls->Solve(); - PrintVars(ls); + Constraint* c5 = ls.AddConstraint(1, x2, -1, x1, kEQ, 15, 5, 5); + Constraint* c6 = ls.AddConstraint(1, x3, -1, x2, kGE, 10, 5000, 5); + + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); + PrintResults(ls.AllVariables()); + + ls.RemoveConstraint(c6); + ls.Solve(); + printf("ls: %s\n", ls.ToString().String()); + PrintResults(ls.UsedVariables()); } @@ -57,5 +114,7 @@ int main() { Test1(); + SoftConstraints(); + SoftInequalityConstraints(); }