示例#1
0
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));
    }
  }
}
示例#2
0
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));
  }
}
示例#3
0
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));
}
示例#4
0
  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);
  }
示例#5
0
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);
示例#6
0
文件: g_ddfmt.c 项目: 0mp/freebsd
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;
	}
示例#7
0
文件: Json.cpp 项目: ai-artisan/kode
 Json::operator double() const {
     return dval();
 }
示例#8
0
文件: strtod.c 项目: CirnOS/newlib
#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),
示例#9
0
void GuiControl::setValue(double d) {
	dval(value) = d;
}
示例#10
0
double GuiControl::doubleValue() {
	return dval(value);
}
示例#11
0
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)));
}
示例#12
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;

}
示例#13
0
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);
        }
    }
}
示例#15
0
文件: strtodI.c 项目: 0mp/freebsd
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;
	}