Refactor tests, and pump symbolic container sizes

This commit is contained in:
Peter Goodman
2018-07-18 09:26:37 -04:00
parent 4de753a619
commit 15ee6c849c
4 changed files with 193 additions and 198 deletions

View File

@@ -153,40 +153,6 @@ class Symbolic {
template <typename T>
class Symbolic<T &> {};
template <typename T>
class SymbolicLinearContainer {
public:
DEEPSTATE_INLINE explicit SymbolicLinearContainer(size_t len)
: value(len) {
if (!value.empty()) {
DeepState_SymbolizeData(&(value.front()), &(value.back()));
}
}
DEEPSTATE_INLINE SymbolicLinearContainer(void)
: SymbolicLinearContainer(DeepState_SizeInRange(0, 32)) {}
DEEPSTATE_INLINE operator T (void) const {
return value;
}
T value;
};
template <>
class Symbolic<std::string> : public SymbolicLinearContainer<std::string> {
using SymbolicLinearContainer::SymbolicLinearContainer;
};
template <>
class Symbolic<std::wstring> : public SymbolicLinearContainer<std::wstring> {
using SymbolicLinearContainer::SymbolicLinearContainer;
};
template <typename T>
class Symbolic<std::vector<T>> :
public SymbolicLinearContainer<std::vector<T>> {};
#define MAKE_SYMBOL_SPECIALIZATION(Tname, tname) \
template <> \
class Symbolic<tname> { \
@@ -313,6 +279,40 @@ static T Pump(T val, unsigned max=10) {
return Minimize(val);
}
template <typename T>
class SymbolicLinearContainer {
public:
DEEPSTATE_INLINE explicit SymbolicLinearContainer(size_t len)
: value(len) {
if (!value.empty()) {
DeepState_SymbolizeData(&(value.front()), &(value.back()));
}
}
DEEPSTATE_INLINE SymbolicLinearContainer(void)
: SymbolicLinearContainer(Pump(DeepState_SizeInRange(0, 32), 32)) {}
DEEPSTATE_INLINE operator T (void) const {
return value;
}
T value;
};
template <>
class Symbolic<std::string> : public SymbolicLinearContainer<std::string> {
using SymbolicLinearContainer::SymbolicLinearContainer;
};
template <>
class Symbolic<std::wstring> : public SymbolicLinearContainer<std::wstring> {
using SymbolicLinearContainer::SymbolicLinearContainer;
};
template <typename T>
class Symbolic<std::vector<T>> :
public SymbolicLinearContainer<std::vector<T>> {};
template <typename... Args>
inline static void ForAll(void (*func)(Args...)) {
func(Symbolic<Args>()...);