Index: uspace/app/tester/float/softfloat1.c
===================================================================
--- uspace/app/tester/float/softfloat1.c	(revision 00e3ad2f20866dd8713265c6879e842f41ab6c40)
+++ uspace/app/tester/float/softfloat1.c	(revision a9f730ae0bc0d07003801ff2f933aaede285117f)
@@ -35,4 +35,5 @@
 #include <div.h>
 #include <comparison.h>
+#include <conversion.h>
 #include <bool.h>
 #include "../tester.h"
@@ -44,7 +45,12 @@
 
 typedef int32_t cmptype_t;
+
+typedef void (* uint_to_double_op_t)(unsigned int, double *, double_t *);
+typedef void (* double_to_uint_op_t)(double, unsigned int *, unsigned int *);
 typedef void (* float_binary_op_t)(float, float, float *, float_t *);
 typedef void (* double_binary_op_t)(double, double, double *, double_t *);
 typedef void (* double_cmp_op_t)(double, double, cmptype_t *, cmptype_t *);
+
+typedef void (* template_unary_t)(void *, unsigned, cmptype_t *, cmptype_t *);
 typedef void (* template_binary_t)(void *, unsigned, unsigned, cmptype_t *,
     cmptype_t *);
@@ -61,4 +67,7 @@
 static double dop_b[OPERANDS] =
 	{-2.1, 100.0, 50.0, -1024.0, 3.5, 0.0};
+
+static unsigned int uop_a[OPERANDS] =
+	{ 4, 2, 100, 50, 1024, 0 };
 
 static cmptype_t cmpabs(cmptype_t a)
@@ -81,4 +90,33 @@
 
 static void
+uint_to_double_template(void *f, unsigned i, cmptype_t *pic, cmptype_t *pisc)
+{
+	double c;
+	double_t sc;
+
+	uint_to_double_op_t op = (uint_to_double_op_t) f;
+	
+	op(uop_a[i], &c, &sc);
+
+	*pic = (cmptype_t) (c * PRECISION);
+	*pisc = (cmptype_t) (sc.val * PRECISION);
+}
+
+static void
+double_to_uint_template(void *f, unsigned i, cmptype_t *pic, cmptype_t *pisc)
+{
+	unsigned int c;
+	unsigned int sc;
+
+	double_to_uint_op_t op = (double_to_uint_op_t) f;
+	
+	op(dop_a[i], &c, &sc);
+
+	*pic = (cmptype_t) c;
+	*pisc = (cmptype_t) sc;
+}
+
+
+static void
 float_template_binary(void *f, unsigned i, unsigned j, cmptype_t *pic,
     cmptype_t *pisc)
@@ -117,4 +155,24 @@
 	
 	op(dop_a[i], dop_b[j], pis, piss);
+}
+
+static bool test_template_unary(template_unary_t template, void *f)
+{
+	bool correct = true;
+	
+	for (unsigned int i = 0; i < OPERANDS; i++) {
+		cmptype_t ic;
+		cmptype_t isc;
+
+		template(f, i, &ic, &isc);	
+		cmptype_t diff = cmpabs(ic - isc);
+			
+		if (diff != 0) {
+			TPRINTF("i=%u diff=%" PRIdCMPTYPE "\n", i, diff);
+			correct = false;
+		}
+	}
+	
+	return correct;
 }
 
@@ -142,4 +200,32 @@
 }
 
+static void uint_to_double_operator(unsigned int a, double *pc, double_t *psc)
+{
+	*pc = (double) a;
+	psc->data = uint_to_double(a);
+}
+
+static void
+double_to_uint_operator(double a, unsigned int *pc, unsigned int *psc)
+{
+	double_t sa;
+
+	sa.val = a;
+
+	*pc = (unsigned int) a;
+	*psc = double_to_uint(sa.data);
+}
+
+static void
+double_to_int_operator(double a, unsigned int *pc, unsigned int *psc)
+{
+	double_t sa;
+
+	sa.val = a;
+
+	*pc = (int) a;
+	*psc = double_to_int(sa.data);
+}
+
 static void float_add_operator(float a, float b, float *pc, float_t *psc)
 {
@@ -295,4 +381,19 @@
 		TPRINTF("%s\n", err);
 	}
+	if (!test_template_unary(uint_to_double_template,
+	    uint_to_double_operator)) {
+		err = "Conversion from unsigned int to double failed";
+		TPRINTF("%s\n", err);
+	}
+	if (!test_template_unary(double_to_uint_template,
+	    double_to_uint_operator)) {
+		err = "Conversion from double to unsigned int failed";
+		TPRINTF("%s\n", err);
+	}
+	if (!test_template_unary(double_to_uint_template,
+	    double_to_int_operator)) {
+		err = "Conversion from double to signed int failed";
+		TPRINTF("%s\n", err);
+	}
 	
 	return err;
