some things I had laying around in a directory but never got committed; minor fix...
authorMorgan Deters <mdeters@gmail.com>
Thu, 30 Jun 2011 03:56:58 +0000 (03:56 +0000)
committerMorgan Deters <mdeters@gmail.com>
Thu, 30 Jun 2011 03:56:58 +0000 (03:56 +0000)
src/expr/node_builder.h
src/expr/node_value.h
src/main/main.cpp
src/util/configuration.cpp
src/util/configuration.h
src/util/configuration_private.h
test/unit/expr/node_builder_black.h

index 95f7c0437200bea22da72af7bf2c8db919871e8a..252cba43e9fc80e93b97efb9c4d29432afb55edc 100644 (file)
@@ -459,9 +459,9 @@ public:
   inline const_iterator begin() const {
     Assert(!isUsed(), "NodeBuilder is one-shot only; "
            "attempt to access it after conversion");
-    CheckArgument(getKind() != kind::UNDEFINED_KIND,
-                  "Iterators over NodeBuilder<> are undefined "
-                  "until a Kind is set");
+    Assert(getKind() != kind::UNDEFINED_KIND,
+           "Iterators over NodeBuilder<> are undefined "
+           "until a Kind is set");
     return d_nv->begin< NodeTemplate<true> >();
   }
 
@@ -469,9 +469,9 @@ public:
   inline const_iterator end() const {
     Assert(!isUsed(), "NodeBuilder is one-shot only; "
            "attempt to access it after conversion");
-    CheckArgument(getKind() != kind::UNDEFINED_KIND,
-                  "Iterators over NodeBuilder<> are undefined "
-                  "until a Kind is set");
+    Assert(getKind() != kind::UNDEFINED_KIND,
+           "Iterators over NodeBuilder<> are undefined "
+           "until a Kind is set");
     return d_nv->end< NodeTemplate<true> >();
   }
 
@@ -486,9 +486,9 @@ public:
   inline kind::MetaKind getMetaKind() const {
     Assert(!isUsed(), "NodeBuilder is one-shot only; "
            "attempt to access it after conversion");
-    CheckArgument(getKind() != kind::UNDEFINED_KIND,
-                  "The metakind of a NodeBuilder<> is undefined "
-                  "until a Kind is set");
+    Assert(getKind() != kind::UNDEFINED_KIND,
+           "The metakind of a NodeBuilder<> is undefined "
+           "until a Kind is set");
     return d_nv->getMetaKind();
   }
 
@@ -496,19 +496,40 @@ public:
   inline unsigned getNumChildren() const {
     Assert(!isUsed(), "NodeBuilder is one-shot only; "
            "attempt to access it after conversion");
-    CheckArgument(getKind() != kind::UNDEFINED_KIND,
-                  "The number of children of a NodeBuilder<> is undefined "
-                  "until a Kind is set");
+    Assert(getKind() != kind::UNDEFINED_KIND,
+           "The number of children of a NodeBuilder<> is undefined "
+           "until a Kind is set");
     return d_nv->getNumChildren();
   }
 
-  /** Access to children of this Node-under-construction. */
+  /**
+   * Access to the operator of this Node-under-construction.  Only
+   * allowed if this NodeBuilder is unused, and has a defined kind
+   * that is of PARAMETERIZED metakind.
+   */
+  inline Node getOperator() const {
+    Assert(!isUsed(), "NodeBuilder is one-shot only; "
+           "attempt to access it after conversion");
+    Assert(getKind() != kind::UNDEFINED_KIND,
+           "NodeBuilder<> operator access is not permitted "
+           "until a Kind is set");
+    Assert(getMetaKind() == kind::metakind::PARAMETERIZED,
+           "NodeBuilder<> operator access is only permitted "
+           "on parameterized kinds, not `%s'",
+           kind::kindToString(getKind()).c_str());
+    return Node(d_nv->getOperator());
+  }
+
+  /**
+   * Access to children of this Node-under-construction.  Only allowed
+   * if this NodeBuilder is unused and has a defined kind.
+   */
   inline Node getChild(int i) const {
     Assert(!isUsed(), "NodeBuilder is one-shot only; "
            "attempt to access it after conversion");
-    CheckArgument(getKind() != kind::UNDEFINED_KIND,
-                  "NodeBuilder<> child access is not permitted "
-                  "until a Kind is set");
+    Assert(getKind() != kind::UNDEFINED_KIND,
+           "NodeBuilder<> child access is not permitted "
+           "until a Kind is set");
     Assert(i >= 0 && unsigned(i) < d_nv->getNumChildren(),
            "index out of range for NodeBuilder::getChild()");
     return Node(d_nv->getChild(i));
index f2da42731ea137e68ccda7246d09a5c68d257c21..2c11b58d5beae8a61a76ea119f6d1f46d099517d 100644 (file)
@@ -290,6 +290,7 @@ public:
   template <class T>
   inline const T& getConst() const;
 
+  NodeValue* getOperator() const;
   NodeValue* getChild(int i) const;
 
   void printAst(std::ostream& out, int indent = 0) const;
@@ -432,6 +433,11 @@ inline bool NodeValue::isBeingDeleted() const {
     NodeManager::currentNM()->isCurrentlyDeleting(this);
 }
 
+inline NodeValue* NodeValue::getOperator() const {
+  Assert(getMetaKind() == kind::metakind::PARAMETERIZED);
+  return d_children[0];
+}
+
 inline NodeValue* NodeValue::getChild(int i) const {
   if(getMetaKind() == kind::metakind::PARAMETERIZED) {
     ++i;
index 9c2464b8df557d6932610f487c77b00fc7c60c6f..c21a7bdacb441ab08f76064bacabde566924babc 100644 (file)
@@ -281,11 +281,7 @@ int runCvc4(int argc, char* argv[]) {
     Message() << Configuration::getPackageName()
               << " " << Configuration::getVersionString();
     if(Configuration::isSubversionBuild()) {
-      Message() << " [subversion " << Configuration::getSubversionBranchName()
-                << " r" << Configuration::getSubversionRevision()
-                << (Configuration::hasSubversionModifications() ?
-                    " (with modifications)" : "")
-                << "]";
+      Message() << " [" << Configuration::getSubversionId() << "]";
     }
     Message() << (Configuration::isDebugBuild() ? " DEBUG" : "")
               << " assertions:"
index db3c5520e1f8b167709d3f102fcd79ccc2bc50e7..aa3e6bf6b0c42ab6bce37a6691438a7fc85a432f 100644 (file)
@@ -19,6 +19,7 @@
  **/
 
 #include <string>
+#include <sstream>
 
 #include "util/configuration.h"
 #include "util/configuration_private.h"
@@ -124,4 +125,15 @@ bool Configuration::hasSubversionModifications() {
   return SUBVERSION_HAS_MODIFICATIONS;
 }
 
+string Configuration::getSubversionId() {
+  if(! isSubversionBuild()) {
+    return "";
+  }
+
+  stringstream ss;
+  ss << "subversion " << getSubversionBranchName() << " r" << getSubversionRevision()
+     << ( ::CVC4::Configuration::hasSubversionModifications() ? " (with modifications)" : "" );
+  return ss.str();
+}
+
 }/* CVC4 namespace */
index 258431114c0e2a109a86b1b7a672d9a5a85d8146..31a2ca3d4ca2ec07654d5b63dbd9524132f1446a 100644 (file)
@@ -87,6 +87,7 @@ public:
   static const char* getSubversionBranchName();
   static unsigned getSubversionRevision();
   static bool hasSubversionModifications();
+  static std::string getSubversionId();
 
 };/* class Configuration */
 
index 4f7501a08a0a341996633e5f54f1538fe82362b9..0421273cae4e546c4427282687de087ed318b62d 100644 (file)
@@ -20,6 +20,9 @@
 #ifndef __CVC4__CONFIGURATION_PRIVATE_H
 #define __CVC4__CONFIGURATION_PRIVATE_H
 
+#include <string>
+#include "util/configuration.h"
+
 namespace CVC4 {
 
 #ifdef CVC4_DEBUG
@@ -100,14 +103,18 @@ namespace CVC4 {
 #  define USING_TLS false
 #endif /* TLS */
 
-#define CVC4_ABOUT_STRING string("\
-This is CVC4 version " CVC4_RELEASE_STRING "\n\n\
+#define CVC4_ABOUT_STRING ( ::std::string("\
+This is CVC4 version " CVC4_RELEASE_STRING ) + \
+    ( ::CVC4::Configuration::isSubversionBuild() \
+        ? ( ::std::string(" [") + ::CVC4::Configuration::getSubversionId() + "]" ) \
+        : ::std::string("") \
+    ) + "\n\n\
 Copyright (C) 2009, 2010, 2011\n\
   The ACSys Group\n\
   Courant Institute of Mathematical Sciences\n\
   New York University\n\
-  New York, NY  10012  USA\n\n") + \
-    (IS_CLN_BUILD ? "\
+  New York, NY  10012  USA\n\n" + \
+    ( IS_CLN_BUILD ? "\
 This CVC4 library uses CLN as its multi-precision arithmetic library.\n\n\
 CVC4 is open-source and is covered by the BSD license (modified).\n\
 However, CLN, the Class Library for Numbers, is covered by the GPL.  Thus\n\
@@ -116,7 +123,7 @@ consult the CVC4 documentation for instructions about building a version\n\
 of CVC4 that links against GMP, and can be used in such applications.\n" : \
 "This CVC4 library uses GMP as its multi-precision arithmetic library.\n\n\
 CVC4 is open-source and is covered by the BSD license (modified).\n\n\
-THIS SOFTWARE PROVIDED AS-IS, WITHOUT ANY WARRANTIES. USE IT AT YOUR OWN RISK.\n")
+THIS SOFTWARE PROVIDED AS-IS, WITHOUT ANY WARRANTIES. USE IT AT YOUR OWN RISK.\n" ) )
 
 }/* CVC4 namespace */
 
index 320d4ddbef6e0d0619ee31c9f35a13037af98f82..c084c4ecb217ec0638176d171924589d82c5b7cc 100644 (file)
@@ -96,9 +96,11 @@ public:
     /* default size tests */
     NodeBuilder<> def;
     TS_ASSERT_EQUALS(def.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(def.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(def.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(def.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(def.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(def.begin(), AssertionException);
+    TS_ASSERT_THROWS(def.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<> spec(specKind);
     TS_ASSERT_EQUALS(spec.getKind(), specKind);
@@ -108,9 +110,11 @@ public:
 
     NodeBuilder<> from_nm(d_nm);
     TS_ASSERT_EQUALS(from_nm.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(from_nm.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(from_nm.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(from_nm.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(from_nm.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(from_nm.begin(), AssertionException);
+    TS_ASSERT_THROWS(from_nm.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<> from_nm_kind(d_nm, specKind);
     TS_ASSERT_EQUALS(from_nm_kind.getKind(), specKind);
@@ -122,9 +126,11 @@ public:
 
     NodeBuilder<K> ws;
     TS_ASSERT_EQUALS(ws.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(ws.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(ws.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(ws.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(ws.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(ws.begin(), AssertionException);
+    TS_ASSERT_THROWS(ws.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<K> ws_kind(specKind);
     TS_ASSERT_EQUALS(ws_kind.getKind(), specKind);
@@ -134,9 +140,11 @@ public:
 
     NodeBuilder<K> ws_from_nm(d_nm);
     TS_ASSERT_EQUALS(ws_from_nm.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(ws_from_nm.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(ws_from_nm.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(ws_from_nm.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(ws_from_nm.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(ws_from_nm.begin(), AssertionException);
+    TS_ASSERT_THROWS(ws_from_nm.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<K> ws_from_nm_kind(d_nm, specKind);
     TS_ASSERT_EQUALS(ws_from_nm_kind.getKind(), specKind);
@@ -153,27 +161,35 @@ public:
 
     NodeBuilder<> copy(def);
     TS_ASSERT_EQUALS(copy.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(copy.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(copy.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(copy.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(copy.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(copy.begin(), AssertionException);
+    TS_ASSERT_THROWS(copy.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<K> cp_ws(ws);
     TS_ASSERT_EQUALS(cp_ws.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(cp_ws.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(cp_ws.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(cp_ws.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(cp_ws.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(cp_ws.begin(), AssertionException);
+    TS_ASSERT_THROWS(cp_ws.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<K-10> cp_from_larger(ws);
     TS_ASSERT_EQUALS(cp_from_larger.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(cp_from_larger.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(cp_from_larger.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(cp_from_larger.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(cp_from_larger.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(cp_from_larger.begin(), AssertionException);
+    TS_ASSERT_THROWS(cp_from_larger.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     NodeBuilder<K+10> cp_from_smaller(ws);
     TS_ASSERT_EQUALS(cp_from_smaller.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(cp_from_smaller.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(cp_from_smaller.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(cp_from_smaller.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(cp_from_smaller.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(cp_from_smaller.begin(), AssertionException);
+    TS_ASSERT_THROWS(cp_from_smaller.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
   }
 
   void testDestructor() {
@@ -284,7 +300,9 @@ public:
     Node x( d_nm->mkVar( *d_integerType ) );
 
     NodeBuilder<> nb;
-    TS_ASSERT_THROWS(nb.getNumChildren(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(nb.getNumChildren(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
     nb << PLUS << x << x;
 
     TS_ASSERT_EQUALS(nb.getNumChildren(), 2u);
@@ -294,7 +312,9 @@ public:
 
     Node n = nb;// avoid warning on clear()
     nb.clear();
-    TS_ASSERT_THROWS(nb.getNumChildren(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(nb.getNumChildren(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
     nb.clear(PLUS);
     TS_ASSERT_EQUALS(nb.getNumChildren(), 0u);
     nb << x << x << x;
@@ -368,9 +388,11 @@ public:
     NodeBuilder<> nb;
 
     TS_ASSERT_EQUALS(nb.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(nb.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(nb.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(nb.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(nb.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(nb.begin(), AssertionException);
+    TS_ASSERT_THROWS(nb.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     nb << specKind;
     push_back(nb, K);
@@ -383,9 +405,11 @@ public:
     nb.clear();
 
     TS_ASSERT_EQUALS(nb.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(nb.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(nb.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(nb.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(nb.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(nb.begin(), AssertionException);
+    TS_ASSERT_THROWS(nb.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
 
     nb << specKind;
     push_back(nb, K);
@@ -406,9 +430,11 @@ public:
     nb.clear();
 
     TS_ASSERT_EQUALS(nb.getKind(), UNDEFINED_KIND);
-    TS_ASSERT_THROWS(nb.getNumChildren(), IllegalArgumentException);
-    TS_ASSERT_THROWS(nb.begin(), IllegalArgumentException);
-    TS_ASSERT_THROWS(nb.end(), IllegalArgumentException);
+#ifdef CVC4_ASSERTIONS
+    TS_ASSERT_THROWS(nb.getNumChildren(), AssertionException);
+    TS_ASSERT_THROWS(nb.begin(), AssertionException);
+    TS_ASSERT_THROWS(nb.end(), AssertionException);
+#endif /* CVC4_ASSERTIONS */
   }
 
   void testStreamInsertionKind() {