Răsfoiți Sursa

partially fix UnitBuilder macro and log(exp) unit tests

Simon Krajewski 11 ani în urmă
părinte
comite
ae3cd3f3b9
2 a modificat fișierele cu 60 adăugiri și 52 ștergeri
  1. 59 51
      tests/unit/UnitBuilder.hx
  2. 1 1
      tests/unit/unitstd/Math.unit.hx

+ 59 - 51
tests/unit/UnitBuilder.hx

@@ -104,61 +104,69 @@ class UnitBuilder {
 		var p = Context.makePosition( { min:0, max:0, file:path } );
 		var file = sys.io.File.getContent(path);
 		var code = Context.parseInlineString("{" + file + "}", p);
-		var block = switch(code.expr) {
-			case EBlock(b): b;
-			case _: throw "false";
+		function mkBlock(e:Expr) {
+			return switch(e.expr) {
+				case EBlock(b): b;
+				case _: [e];
+			}
 		}
-		var ret = [];
-		for (e in block) {
-			var e = switch(e.expr) {
-				case EBinop(OpEq, e1, { expr: EConst(CIdent("false")) } )
-				| EBinop(OpEq, { expr: EConst(CIdent("false")) }, e1):
-					{
-						expr: (macro f($e1)).expr,
-						pos: e.pos
-					}
-				case EBinop(OpEq, e1, { expr: EConst(CIdent("true")) } )
-				| EBinop(OpEq, { expr: EConst(CIdent("true")) }, e1):
-					{
-						expr: (macro t($e1)).expr,
-						pos: e.pos
-					}
-				case EBinop(OpEq, e1, { expr: EArrayDecl(el) } )
-				| EBinop(OpEq, { expr: EArrayDecl(el) }, e1 ):
-					var el2 = [];
-					for (i in 0...el.length) {
-						var e2 = el[i];
-						el2.push(mkEq((macro $e1[$v{i}]), e2, e.pos));
-					}
-					if (el2.length == 0)
-						mkEq((macro $e1.length), (macro 0), e.pos);
-					else
-						macro { $a{el2}; };
-				case EBinop(OpEq, e1, e2):
-					mkEq(e1, e2, e.pos);
-				case EBinop(OpGt | OpGte | OpLt | OpLte, _, _):
-					{
-						expr: (macro t($e)).expr,
-						pos: e.pos
-					}
-				case EThrow(e):
-					macro exc(function() $e);
-				case EIn(e1, {expr:EArrayDecl(el) }):
-					var el2 = [];
-					for (e in el)
-						el2.push(macro $e1 == $e);
-					macro @:pos(e.pos) t(${ collapseToOrExpr(el2) } );
-				case EVars(vl):
-					for (v in vl)
-						if (v.name == "t" || v.name == "f" || v.name == "eq" || v.name == "neq")
-							Context.error('${v.name} is reserved for unit testing', e.pos);
+		function bl(block:Array<Expr>):Array<Expr> {
+			var ret = [];
+			for (e in block) {
+				var e = switch(e.expr) {
+					case EBinop(OpEq, e1, { expr: EConst(CIdent("false")) } )
+					| EBinop(OpEq, { expr: EConst(CIdent("false")) }, e1):
+						{
+							expr: (macro f($e1)).expr,
+							pos: e.pos
+						}
+					case EBinop(OpEq, e1, { expr: EConst(CIdent("true")) } )
+					| EBinop(OpEq, { expr: EConst(CIdent("true")) }, e1):
+						{
+							expr: (macro t($e1)).expr,
+							pos: e.pos
+						}
+					case EBinop(OpEq, e1, { expr: EArrayDecl(el) } )
+					| EBinop(OpEq, { expr: EArrayDecl(el) }, e1 ):
+						var el2 = [];
+						for (i in 0...el.length) {
+							var e2 = el[i];
+							el2.push(mkEq((macro $e1[$v{i}]), e2, e.pos));
+						}
+						if (el2.length == 0)
+							mkEq((macro $e1.length), (macro 0), e.pos);
+						else
+							macro { $a{el2}; };
+					case EBinop(OpEq, e1, e2):
+						mkEq(e1, e2, e.pos);
+					case EBinop(OpGt | OpGte | OpLt | OpLte, _, _):
+						{
+							expr: (macro t($e)).expr,
+							pos: e.pos
+						}
+					case EThrow(e):
+						macro exc(function() $e);
+					case EIn(e1, {expr:EArrayDecl(el) }):
+						var el2 = [];
+						for (e in el)
+							el2.push(macro $e1 == $e);
+						macro @:pos(e.pos) t(${ collapseToOrExpr(el2) } );
+					case EVars(vl):
+						for (v in vl)
+							if (v.name == "t" || v.name == "f" || v.name == "eq" || v.name == "neq")
+								Context.error('${v.name} is reserved for unit testing', e.pos);
+							e;
+					case EFor(it, {expr: EBlock(el), pos: p}):
+						{ expr: EFor(it, {expr:EBlock(bl(el)), pos: p}), pos: e.pos };
+					case _:
 						e;
-				case _:
-					e;
+				}
+				ret.push(e);
 			}
-			ret.push(e);
+			return ret;
 		}
-		return macro { $a{ret}; };
+		var block = mkBlock(code);
+		return macro $b{bl(block)};
 	}
 	#end
 }

+ 1 - 1
tests/unit/unitstd/Math.unit.hx

@@ -137,7 +137,7 @@ Math.isNaN(Math.log(Math.NEGATIVE_INFINITY)) == true;
 Math.log(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
 
 // exp + log
-var floats = [1.33, 39232.911, 12.0, -112.999992, 99999.99999, 0.0, Math.NEGATIVE_INFINITY, Math.POSITIVE_INFINITY];
+var floats = [1.33, 12.0, -112.999992, 0.0, Math.NEGATIVE_INFINITY, Math.POSITIVE_INFINITY];
 for (f in floats) {
 	Math.log(Math.exp(f)) == f;
 }