TEST(Type, OptCouldBe) { for (auto& x : optionals) EXPECT_TRUE(x.couldBe(unopt(x))); auto true_cases = std::initializer_list<std::pair<Type,Type>> { { opt(sval(s_test.get())), TStr }, { opt(sval(s_test.get())), TInitNull }, { opt(sval(s_test.get())), TSStr }, { opt(sval(s_test.get())), sval(s_test.get()) }, { opt(ival(2)), TInt }, { opt(ival(2)), TInitNull }, { opt(ival(2)), ival(2) }, { opt(dval(2.0)), TDbl }, { opt(dval(2.0)), TInitNull }, { opt(dval(2.0)), dval(2) }, { opt(TFalse), TBool }, { opt(TFalse), TFalse }, { opt(TTrue), TBool }, { opt(TTrue), TTrue }, }; auto false_cases = std::initializer_list<std::pair<Type,Type>> { { opt(sval(s_test.get())), TCStr }, { opt(ival(2)), TDbl }, { opt(dval(2.0)), TInt }, { opt(TFalse), TTrue }, { opt(TTrue), TFalse }, }; for (auto kv : true_cases) { EXPECT_TRUE(kv.first.couldBe(kv.second)) << show(kv.first) << " couldBe " << show(kv.second) << " should be true"; } for (auto kv : false_cases) { EXPECT_TRUE(!kv.first.couldBe(kv.second)) << show(kv.first) << " couldBe " << show(kv.second) << " should be false"; } for (auto kv : boost::join(true_cases, false_cases)) { EXPECT_EQ(kv.first.couldBe(kv.second), kv.second.couldBe(kv.first)) << show(kv.first) << " couldBe " << show(kv.second) << " wasn't reflexive"; } for (auto& x : optionals) { EXPECT_TRUE(x.couldBe(unopt(x))); EXPECT_TRUE(x.couldBe(TInitNull)); EXPECT_TRUE(!x.couldBe(TUninit)); for (auto& y : optionals) { EXPECT_TRUE(x.couldBe(y)); } } }
TEST(Type, OptTV) { EXPECT_TRUE(!tv(opt(ival(2)))); EXPECT_TRUE(!tv(opt(sval(s_test.get())))); EXPECT_TRUE(!tv(opt(dval(2.0)))); EXPECT_TRUE(!tv(TOptFalse)); EXPECT_TRUE(!tv(TOptTrue)); for (auto& x : optionals) { EXPECT_TRUE(!tv(x)); } }
TEST(Type, OptUnionOf) { EXPECT_EQ(opt(ival(2)), union_of(ival(2), TInitNull)); EXPECT_EQ(opt(dval(2.0)), union_of(TInitNull, dval(2.0))); EXPECT_EQ(opt(sval(s_test.get())), union_of(sval(s_test.get()), TInitNull)); EXPECT_EQ(opt(sval(s_test.get())), union_of(TInitNull, sval(s_test.get()))); EXPECT_EQ(TOptBool, union_of(TOptFalse, TOptTrue)); EXPECT_EQ(TOptBool, union_of(TOptTrue, TOptFalse)); EXPECT_EQ(TOptCArr, union_of(TCArr, TInitNull)); EXPECT_EQ(TOptCArr, union_of(TInitNull, TCArr)); EXPECT_EQ(TOptSArr, union_of(TInitNull, TOptSArr)); EXPECT_EQ(TOptSArr, union_of(TOptSArr, TInitNull)); EXPECT_EQ(TOptArr, union_of(TOptArr, TInitNull)); EXPECT_EQ(TOptArr, union_of(TInitNull, TOptArr)); EXPECT_EQ(TInitUnc, union_of(TOptSArr, TSStr)); EXPECT_EQ(TInitUnc, union_of(TSStr, TOptSArr)); }
void UaServer::EnableEventNotification() { Node server = GetServerNode(); uint8_t notifierval = 0; notifierval |= EventNotifier::SubscribeToEvents; DataValue dval(notifierval); dval.SetSourceTimestamp(DateTime::Current()); server.SetAttribute(AttributeId::EventNotifier, dval); }
const float floatNan = FLOAT_NAN; const float floatMax = FLT_MAX; const float floatMin = -FLT_MAX; const float posValue = val(); const float negValue = val2(); const float posZero = zero(); const float negZero = zero2(); const double de = dret_e(); const double dnegpi = dret_minuspi(); const double dinf = DOUBLE_INF; const double dnegInf = -DOUBLE_INF; const double doubleNan = DOUBLE_NAN; const double doubleMax = DBL_MAX; const double doubleMin = -DBL_MAX; const double dposValue = dval(); const double dnegValue = dval2(); const double dposZero = dzero(); const double dnegZero = dzero2(); int main() { printf("e: %f\n", e); printf("negpi: %f\n", negpi); printf("inf: %f\n", inf); printf("negInf: %f\n", negInf); printf("floatNan: %f\n", floatNan); printf("floatMax: %f\n", floatMax); printf("floatMin: %f\n", floatMin); printf("posValue: %f\n", posValue); printf("negValue: %f\n", negValue);
g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize) #endif { FPI fpi; char *b, *s, *se; ULong *L, bits0[4], *bits, *zx; int bx, by, decpt, ex, ey, i, j, mode; Bigint *x, *y, *z; U *dd, ddx[2]; #ifdef Honor_FLT_ROUNDS /*{{*/ int Rounding; #ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ Rounding = Flt_Rounds; #else /*}{*/ Rounding = 1; switch(fegetround()) { case FE_TOWARDZERO: Rounding = 0; break; case FE_UPWARD: Rounding = 2; break; case FE_DOWNWARD: Rounding = 3; } #endif /*}}*/ #else /*}{*/ #define Rounding FPI_Round_near #endif /*}}*/ if (bufsize < 10 || bufsize < ndig + 8) return 0; dd = (U*)dd0; L = dd->L; if ((L[_0] & 0x7ff00000L) == 0x7ff00000L) { /* Infinity or NaN */ if (L[_0] & 0xfffff || L[_1]) { nanret: return strcp(buf, "NaN"); } if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) { if (L[2+_0] & 0xfffff || L[2+_1]) goto nanret; if ((L[_0] ^ L[2+_0]) & 0x80000000L) goto nanret; /* Infinity - Infinity */ } infret: b = buf; if (L[_0] & 0x80000000L) *b++ = '-'; return strcp(b, "Infinity"); } if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) { L += 2; if (L[_0] & 0xfffff || L[_1]) goto nanret; goto infret; } if (dval(&dd[0]) + dval(&dd[1]) == 0.) { b = buf; #ifndef IGNORE_ZERO_SIGN if (L[_0] & L[2+_0] & 0x80000000L) *b++ = '-'; #endif *b++ = '0'; *b = 0; return b; } if ((L[_0] & 0x7ff00000L) < (L[2+_0] & 0x7ff00000L)) { dval(&ddx[1]) = dval(&dd[0]); dval(&ddx[0]) = dval(&dd[1]); dd = ddx; L = dd->L; } z = d2b(dval(&dd[0]), &ex, &bx); if (dval(&dd[1]) == 0.) goto no_y; x = z; y = d2b(dval(&dd[1]), &ey, &by); if ( (i = ex - ey) !=0) { if (i > 0) { x = lshift(x, i); ex = ey; } else y = lshift(y, -i); } if ((L[_0] ^ L[2+_0]) & 0x80000000L) { z = diff(x, y); if (L[_0] & 0x80000000L) z->sign = 1 - z->sign; } else { z = sum(x, y); if (L[_0] & 0x80000000L) z->sign = 1; } Bfree(x); Bfree(y); no_y: bits = zx = z->x; for(i = 0; !*zx; zx++) i += 32; i += lo0bits(zx); if (i) { rshift(z, i); ex += i; } fpi.nbits = z->wds * 32 - hi0bits(z->x[j = z->wds-1]); if (fpi.nbits < 106) { fpi.nbits = 106; if (j < 3) { for(i = 0; i <= j; i++) bits0[i] = bits[i]; while(i < 4) bits0[i++] = 0; bits = bits0; } } mode = 2; if (ndig <= 0) { if (bufsize < (int)(fpi.nbits * .301029995664) + 10) { Bfree(z); return 0; } mode = 0; } fpi.emin = 1-1023-53+1; fpi.emax = 2046-1023-106+1; fpi.rounding = Rounding; fpi.sudden_underflow = 0; i = STRTOG_Normal; s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); b = g__fmt(buf, s, se, decpt, z->sign, bufsize); Bfree(z); return b; }
Json::operator double() const { return dval(); }
#define Check_FLT_ROUNDS #else #define Rounding Flt_Rounds #endif #ifdef Avoid_Underflow /*{*/ static double _DEFUN (sulp, (x, scale), U x _AND int scale) { U u; double rv; int i; rv = ulp(dval(x)); if (!scale || (i = 2*P + 1 - ((dword0(x) & Exp_mask) >> Exp_shift)) <= 0) return rv; /* Is there an example where i <= 0 ? */ dword0(u) = Exp_1 + ((__int32_t)i << Exp_shift); #ifndef _DOUBLE_IS_32BITS dword1(u) = 0; #endif return rv * u.d; } #endif /*}*/ #ifndef NO_HEX_FP static void _DEFUN (ULtod, (L, bits, exp, k),
void GuiControl::setValue(double d) { dval(value) = d; }
double GuiControl::doubleValue() { return dval(value); }
TEST(Type, Option) { EXPECT_TRUE(TTrue.subtypeOf(TOptTrue)); EXPECT_TRUE(TInitNull.subtypeOf(TOptTrue)); EXPECT_TRUE(!TUninit.subtypeOf(TOptTrue)); EXPECT_TRUE(TFalse.subtypeOf(TOptFalse)); EXPECT_TRUE(TInitNull.subtypeOf(TOptFalse)); EXPECT_TRUE(!TUninit.subtypeOf(TOptFalse)); EXPECT_TRUE(TFalse.subtypeOf(TOptBool)); EXPECT_TRUE(TTrue.subtypeOf(TOptBool)); EXPECT_TRUE(TInitNull.subtypeOf(TOptBool)); EXPECT_TRUE(!TUninit.subtypeOf(TOptBool)); EXPECT_TRUE(ival(3).subtypeOf(TOptInt)); EXPECT_TRUE(TInt.subtypeOf(TOptInt)); EXPECT_TRUE(TInitNull.subtypeOf(TOptInt)); EXPECT_TRUE(!TUninit.subtypeOf(TOptInt)); EXPECT_TRUE(TDbl.subtypeOf(TOptDbl)); EXPECT_TRUE(TInitNull.subtypeOf(TOptDbl)); EXPECT_TRUE(!TUninit.subtypeOf(TOptDbl)); EXPECT_TRUE(dval(3.0).subtypeOf(TOptDbl)); EXPECT_TRUE(sval(s_test.get()).subtypeOf(TOptSStr)); EXPECT_TRUE(TSStr.subtypeOf(TOptSStr)); EXPECT_TRUE(TInitNull.subtypeOf(TOptSStr)); EXPECT_TRUE(!TUninit.subtypeOf(TOptSStr)); EXPECT_TRUE(!TStr.subtypeOf(TOptSStr)); EXPECT_TRUE(TStr.couldBe(TOptSStr)); EXPECT_TRUE(TCStr.subtypeOf(TOptStr)); EXPECT_TRUE(TCArr.subtypeOf(TOptArr)); EXPECT_TRUE(TStr.subtypeOf(TOptStr)); EXPECT_TRUE(TSStr.subtypeOf(TOptStr)); EXPECT_TRUE(sval(s_test.get()).subtypeOf(TOptStr)); EXPECT_TRUE(TInitNull.subtypeOf(TOptStr)); EXPECT_TRUE(!TUninit.subtypeOf(TOptStr)); EXPECT_TRUE(TSArr.subtypeOf(TOptSArr)); EXPECT_TRUE(!TArr.subtypeOf(TOptSArr)); EXPECT_TRUE(TInitNull.subtypeOf(TOptSArr)); EXPECT_TRUE(!TUninit.subtypeOf(TOptSArr)); EXPECT_TRUE(TArr.subtypeOf(TOptArr)); EXPECT_TRUE(TInitNull.subtypeOf(TOptArr)); EXPECT_TRUE(!TUninit.subtypeOf(TOptArr)); EXPECT_TRUE(TObj.subtypeOf(TOptObj)); EXPECT_TRUE(TInitNull.subtypeOf(TOptObj)); EXPECT_TRUE(!TUninit.subtypeOf(TOptObj)); EXPECT_TRUE(TRes.subtypeOf(TOptRes)); EXPECT_TRUE(TInitNull.subtypeOf(TOptRes)); EXPECT_TRUE(!TUninit.subtypeOf(TOptRes)); for (auto& t : optionals) EXPECT_EQ(t, opt(unopt(t))); for (auto& t : optionals) EXPECT_TRUE(is_opt(t)); for (auto& t : all) { auto const found = std::find(begin(optionals), end(optionals), t) != end(optionals); EXPECT_EQ(found, is_opt(t)); } EXPECT_TRUE(is_opt(opt(sval(s_test.get())))); EXPECT_TRUE(is_opt(opt(ival(2)))); EXPECT_TRUE(is_opt(opt(dval(2.0)))); EXPECT_FALSE(is_opt(sval(s_test.get()))); EXPECT_FALSE(is_opt(ival(2))); EXPECT_FALSE(is_opt(dval(2.0))); }
/** Method to send createopt schedule payload @param pointer to class VEN2b @param Start time @param Stop time @param Reason @param Resource @Return status */ bool OptScheduleCreate::OptSchCreate(VEN2b *venCreateOpt, string startTime, string stopTime, string reason, string resource) { ucmlogging log; sqliteDB sdb; bool Status = false; time_t starttime; time_t stoptime; stringstream stream; int duration; //to get marketcontext reportRegister rr; OptReasonValue reasonVal(reason); OptSchedule sched(OptTypeType::optOut, reasonVal, rr.getMarketContext(),resource, ""); DurationModifier dval("SECONDS"); stream<<startTime; stream>>starttime; stream.clear(); stream<<stopTime; stream>>stoptime; duration = (stoptime-starttime); sched.addAvailable(starttime, duration, dval.SECONDS); try { //OptSchCreate Request from VEN auto_ptr<CreateOptSchedule> createopt = venCreateOpt->createOptSchedule(sched); oadrPayload *payload = createopt->response(); xmlFileCreation requestLog("oadrCreateOpt.xml", createopt->requestBody()); if (payload == NULL || !payload->oadrSignedObject().oadrCreatedOpt().present()) { log.logger("Received unexpected payload" , ucmlogging::Error); sdb.sqliteDBwriteString("errormsg","Received unexpected Payload from server!!!Failed to createopt schedule!!!", hmiven, "hmivenflag"); xmlFileCreation responseLog("oadrCreatedOpt.xml", createopt->responseBody()); return false; } oadrCreatedOptType *response = &payload->oadrSignedObject().oadrCreatedOpt().get(); if (response->eiResponse().responseCode().compare("200") != 0) { log.logger("Received unexpected response code: " + response->eiResponse().responseCode(), ucmlogging::Error); sdb.sqliteDBwriteString("errormsg","Received unexpected Response code from server: " + response->eiResponse().responseCode() + "Failed to createopt schedule!!!", hmiven, "hmivenflag"); xmlFileCreation responseLog("oadrCreatedOpt.xml", createopt->responseBody()); return false; } //log file creation. xmlFileCreation responseLog("oadrCreatedOpt.xml", createopt->responseBody()); setOptIdVal(response->optID()); Status = true; } catch (CurlException& ex) { log.logger("caught exception: " + string(ex.what()) + "!!!Failed to createopt schedule!!!",ucmlogging::Error); sdb.sqliteDBwriteString("errormsg",string(ex.what())+ "!!!Failed to createopt schedule!!!", hmiven, "hmivenflag"); } return Status; }
TEST(Type, Num) { EXPECT_EQ(union_of(TInt, TDbl), TNum); EXPECT_EQ(union_of(ival(2), dval(1.0)), TNum); EXPECT_EQ(union_of(TInt, dval(1.0)), TNum); }
/** Translate python list of tuples to Config * * [(K,V)] -> Config * float -> double * str -> string * [[()]] -> vector<Config> (recurse) * ndarray -> vector<double> * TODO: [0.0] -> vector<double> */ void List2Config(Config& ret, PyObject *list, unsigned depth) { if(depth>3) throw std::runtime_error("too deep for Dict2Config"); PyRef<> iter(PyObject_GetIter(list)); while(true) { PyObject *item = PyIter_Next(iter.py()); if(!item) break; PyRef<> itemref(item); const char *kname; PyObject *value; if(!PyArg_ParseTuple(item, "sO", &kname, &value)) throw std::runtime_error("list item is not a tuple?"); if(PyArray_Check(value)) { // array as vector<double> PyRef<> arr(PyArray_ContiguousFromAny(value, NPY_DOUBLE, 0, 2)); double *buf = (double*)PyArray_DATA(arr.py()); std::vector<double> temp(PyArray_SIZE(arr.py())); std::copy(buf, buf+temp.size(), temp.begin()); ret.swap<std::vector<double> >(kname, temp); } else if(PyNumber_Check(value)) { // scalar as double PyRef<> dval(PyNumber_Float(value)); double val = PyFloat_AsDouble(dval.py()); ret.set<double>(kname, val); } else if(PyUnicode_Check(value) || (PY_MAJOR_VERSION < 3 && PyBytes_Check(value))) { // string PyRef<> valref(value, borrow()); PyCString sval(valref); const char *val = sval.c_str(); ret.set<std::string>(kname, val); } else if(PySequence_Check(value)) { // list of dict Py_ssize_t N = PySequence_Size(value); Config::vector_t output; output.reserve(N); for(Py_ssize_t i=0; i<N; i++) { PyRef<> elem(PySequence_GetItem(value, i)); if(PyDict_Check(elem.py())) { elem.reset(PyMapping_Items(elem.py())); } if(!PyList_Check(elem.py())) { PyTypeObject *valuetype = (PyTypeObject*)PyObject_Type(elem.py()); throw std::invalid_argument(SB()<<"lists must contain only dict or list of tuples, not "<<valuetype->tp_name); } output.push_back(ret.new_scope()); List2Config(output.back(), elem.py(), depth+1); // inheirt parent scope } ret.set<Config::vector_t>(kname, output); } else { PyTypeObject *valuetype = (PyTypeObject*)PyObject_Type(value); throw std::invalid_argument(SB()<<"Must be a dict, not "<<valuetype->tp_name); } } }
strtodI(CONST char *s, char **sp, double *dd) #endif { static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI }; ULong bits[2], sign; Long exp; int j, k; U *u; k = strtodg(s, sp, &fpi, &exp, bits); u = (U*)dd; sign = k & STRTOG_Neg ? 0x80000000L : 0; switch(k & STRTOG_Retmask) { case STRTOG_NoNumber: dval(&u[0]) = dval(&u[1]) = 0.; break; case STRTOG_Zero: dval(&u[0]) = dval(&u[1]) = 0.; #ifdef Sudden_Underflow if (k & STRTOG_Inexact) { if (sign) word0(&u[0]) = 0x80100000L; else word0(&u[1]) = 0x100000L; } break; #else goto contain; #endif case STRTOG_Denormal: word1(&u[0]) = bits[0]; word0(&u[0]) = bits[1]; goto contain; case STRTOG_Normal: word1(&u[0]) = bits[0]; word0(&u[0]) = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20); contain: j = k & STRTOG_Inexact; if (sign) { word0(&u[0]) |= sign; j = STRTOG_Inexact - j; } switch(j) { case STRTOG_Inexlo: #ifdef Sudden_Underflow if ((u->L[_0] & 0x7ff00000) < 0x3500000) { word0(&u[1]) = word0(&u[0]) + 0x3500000; word1(&u[1]) = word1(&u[0]); dval(&u[1]) += ulp(&u[1]); word0(&u[1]) -= 0x3500000; if (!(word0(&u[1]) & 0x7ff00000)) { word0(&u[1]) = sign; word1(&u[1]) = 0; } } else #endif dval(&u[1]) = dval(&u[0]) + ulp(&u[0]); break; case STRTOG_Inexhi: dval(&u[1]) = dval(&u[0]); #ifdef Sudden_Underflow if ((word0(&u[0]) & 0x7ff00000) < 0x3500000) { word0(&u[0]) += 0x3500000; dval(&u[0]) -= ulpdown(u); word0(&u[0]) -= 0x3500000; if (!(word0(&u[0]) & 0x7ff00000)) { word0(&u[0]) = sign; word1(&u[0]) = 0; } } else #endif dval(&u[0]) -= ulpdown(u); break; default: dval(&u[1]) = dval(&u[0]); } break; case STRTOG_Infinite: word0(&u[0]) = word0(&u[1]) = sign | 0x7ff00000; word1(&u[0]) = word1(&u[1]) = 0; if (k & STRTOG_Inexact) { if (sign) { word0(&u[1]) = 0xffefffffL; word1(&u[1]) = 0xffffffffL; } else { word0(&u[0]) = 0x7fefffffL; word1(&u[0]) = 0xffffffffL; } } break; case STRTOG_NaN: u->L[0] = (u+1)->L[0] = d_QNAN0; u->L[1] = (u+1)->L[1] = d_QNAN1; break; case STRTOG_NaNbits: word0(&u[0]) = word0(&u[1]) = 0x7ff00000 | sign | bits[1]; word1(&u[0]) = word1(&u[1]) = bits[0]; } return k; }