From 43f4ec85384b5a03b83d13c6cc7e9fd3698df17d Mon Sep 17 00:00:00 2001
From: Nora Abi Akar <nora.abiakar@gmail.com>
Date: Thu, 18 Mar 2021 12:20:53 +0100
Subject: [PATCH] Add `on-components` to s-expression locset parser  (#1436)

* Add on-components to label_parse.cpp, and to corresponding unit test.
---
 arbor/morph/label_parse.cpp | 2 ++
 arbor/morph/locset.cpp      | 2 +-
 test/unit/test_s_expr.cpp   | 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/arbor/morph/label_parse.cpp b/arbor/morph/label_parse.cpp
index 86edaadf..a40bb160 100644
--- a/arbor/morph/label_parse.cpp
+++ b/arbor/morph/label_parse.cpp
@@ -246,6 +246,8 @@ std::unordered_multimap<std::string, evaluator> eval_map {
                             "'uniform' with 4 arguments: (reg:region, first:int, last:int, seed:int)")},
     {"on-branches",make_call<double>(arb::ls::on_branches,
                             "'on-branches' with 1 argument: (pos:double)")},
+    {"on-components",make_call<double, arb::region>(arb::ls::on_components,
+                            "'on-components' with 2 arguments: (pos:double, reg:region)")},
     {"locset",  make_call<std::string>(arb::ls::named,
                             "'locset' with 1 argument: (name:string)")},
     {"restrict",  make_call<arb::locset, arb::region>(arb::ls::restrict,
diff --git a/arbor/morph/locset.cpp b/arbor/morph/locset.cpp
index 17a27add..2fc140e5 100644
--- a/arbor/morph/locset.cpp
+++ b/arbor/morph/locset.cpp
@@ -392,7 +392,7 @@ mlocation_list thingify_(const on_components_& n, const mprovider& p) {
 }
 
 std::ostream& operator<<(std::ostream& o, const on_components_& x) {
-    return o << "(on_components " << x.relpos << " " << x.reg << ")";
+    return o << "(on-components " << x.relpos << " " << x.reg << ")";
 }
 
 // Uniform locset.
diff --git a/test/unit/test_s_expr.cpp b/test/unit/test_s_expr.cpp
index a70169b5..13bd7b7b 100644
--- a/test/unit/test_s_expr.cpp
+++ b/test/unit/test_s_expr.cpp
@@ -136,6 +136,7 @@ TEST(regloc, round_tripping) {
         "(proximal (join (tag 1) (tag 2)))",
         "(uniform (tag 1) 0 100 52)",
         "(restrict (terminal) (tag 12))",
+        "(on-components 0.3 (segment 2))",
         "(join (terminal) (root))",
         "(sum (terminal) (root))",
     };
-- 
GitLab