示例#1
0
文件: _k20.c 项目: kevinarpe/kx
static PyObject*
_ksk(PyObject* self, PyObject* args)
{
	_K* ka = 0;
	char* s;
	if (PyArg_ParseTuple(args, "s|O!", &s, &_KType, &ka)) {
		K kobj = ksk(s, ka?ka->kobj:0);
		if (!kobj) {
			return PyErr_Format(PyExc_TypeError, 
					    "k failed to execute %s", s) ;
		}
		if (6 == kobj->t && 0 != kobj->n ) {
			return PyErr_Format(KErr, "k: %s error", (S)kobj->n);
		}
		return _mk_K(kobj);
	}
	PyErr_BadArgument();
	return NULL;
}
示例#2
0
文件: _k20.c 项目: kevinarpe/kx
static PyObject*
_K_repr(PyObject* self)
{
	if (IS_K(self)) {
		K k = ((_K*)self)->kobj;
		if (!k) {
			PyErr_SetString(PyExc_AssertionError, "null kobj");
			return NULL;
		}
		K ks = ksk("{$5:x}", gnk(1, k));
		if (!ks) {
			PyErr_SetString(PyExc_RuntimeError, "ksk returned null");
			return NULL;
		}
		PyObject* o = Py_BuildValue("s", KC(ks));
		cd(ks);
		return o;
	}
	return PyErr_Format(PyExc_TypeError, "not k type %s", 
			    self->ob_type->tp_name);
}
示例#3
0
文件: _k20.c 项目: kevinarpe/kx
PyMODINIT_FUNC
init_k20(void) 
{
	PyObject* m;
	PyObject* c_api_object;

	if (PyType_Ready(&_KType) < 0)
		return;
	
	m = Py_InitModule3("_k20", funcs, doc);
	
	if (m == NULL)
		return;
	
	Py_INCREF(&_KType);
	PyModule_AddObject(m, "_K", (PyObject *)&_KType);

	if (KErr == NULL) {
		KErr = PyErr_NewException("_k20.kerr", NULL, NULL);
		if (KErr == NULL)
			return;
	}
	/* Initialize the C API pointer array */
	PyK_API[PyK_KType_NUM] = (void*)&_KType;
	PyK_API[PyK_mk_K_NUM] = (void*)&_mk_K;
	/* Create a CObject containing the API pointer array's address */
	c_api_object = PyCObject_FromVoidPtr((void*)PyK_API, NULL);
	if (c_api_object) {
		PyModule_AddObject(m, "_C_API", c_api_object);
	}
	Py_INCREF(KErr);
	PyModule_AddObject(m, "kerr", KErr);
	PyModule_AddStringConstant(m, "__version__", __version__);
	/* initialize k */
	cd(ksk("", 0));
}
示例#4
0
文件: kapi-test.c 项目: 0branch/kona
int
main(int argc, char** argv)
{
	F pi = atan(1.0)*4;
	K a = gi(2);
	K b = gi(3);
	K c = gi(4);
	K* v;

	cd(ksk("",0));

	tst(Ki(a)==2);
	tst(Ki(b) + 1 == Ki(c));
	cd(a); cd(b); cd(c);

	b = gf(1.0); c = gf(2);
	tst(Kf(b) + 1 == Kf(c));
	cd(b); cd(c);

	a = gs(sp("foo"));
	b = ksk("`foo", 0);
	tst(Ks(a) == Ks(b));
	cd(a); cd(b);

	a = ksk("2 + 3", 0);
	tst(Ki(a) == 5);
	cd(a);

	a = ksk("_ci 65", 0);
	tst(Kc(a) == 'A');

	// XXX this should return type 1 uniform vector
	a=gnk(3,gi(11),gi(22),gi(33));
	tst(a->t == 0);

	v = (K*)a->k;
	tst(Ki(v[0])+Ki(v[1])==Ki(v[2]));
	cd(a);


	{
	b = gsk("pi",gf(pi));
	kap(&KTREE, &b);
	a = X(".pi");
	tst(Kf(a) == pi);
	cd(a);
	}

	{
	K dir = gtn(5,0);
	K t;
	t = gsk("x",gi(1)); kap(&dir, &t);
	t = gsk("y",gi(2)); kap(&dir, &t);
	t = gsk("z",dir); kap(&KTREE, &t);
	a = X(".z.x");
	tst(Ki(a) == 1);
	cd(a);
	a = X(".z.y");
	tst(Ki(a) == 2);
	cd(a);
	}

	{
	I i;
	K d = gtn(5,0);
	K c0 = gtn(0,0);
	K c1 = gtn(-1,0);
	K t0, t1, e;
	t0 = gsk("a", c0); kap(&d,&t0);
	t1 = gsk("b", c1); kap(&d,&t1);
	e = gp("hello1"); kap(&c0,&e);
	e = gp("hello2"); kap(&c0,&e);
	KK(KK(d)[0])[1] = c0;
	i = 1; kap(&KK(KK(d)[1])[1], &i);
	i = 2; kap(&KK(KK(d)[1])[1], &i);
	//i = 1; kap(&c1, &i);
	//i = 2; kap(&c1, &i);
	//KK(KK(d)[1])[1] = c1;
	show(d);
	}


	//b = ksk("+/", a);
	//tst(Ki(b) == 66);

	//argc--;argv++;
	//DO(i, argc, {a=ksk(argv[i], 0);

	//ksk("`0:,/$!10;`0:,\"\n\"", 0);

	fprintf(stderr, "Pass:%4d, fail:%4d\n", pass, fail);
	if (argc > 1 && strcmp(argv[1], "-i") == 0) {
		boilerplate();
		attend();
	}
}