Explorar o código

[tests] add

closes #9811
Simon Krajewski %!s(int64=5) %!d(string=hai) anos
pai
achega
64bbaabab6

+ 5 - 0
tests/misc/projects/Issue9811/Main.hx

@@ -0,0 +1,5 @@
+class Main {
+	static function main() {
+		var s:Stream<Int, Int> = null;
+	}
+}

+ 44 - 0
tests/misc/projects/Issue9811/Stream.hx

@@ -0,0 +1,44 @@
+class Error {}
+
+enum Outcome<Data, Failure> {
+	Success(data:Data);
+	Failure(failure:Failure);
+}
+
+interface Future<T> {
+	function map<A>(f:T->A):Future<A>;
+}
+
+typedef Surprise<D, F> = Future<Outcome<D, F>>;
+
+abstract Promise<T>(Surprise<T, Error>) from Surprise<T, Error> to Surprise<T, Error> {
+	public inline function map<R>(f:Outcome<T, Error>->R):Future<R>
+		return this.map(f);
+
+	@:from static inline function ofError<T>(e:Error):Promise<T>
+		return throw 1;
+}
+
+abstract Stream<Item, Quality>(StreamObject<Item, Quality>) from StreamObject<Item, Quality> to StreamObject<Item, Quality> {
+	public var depleted(get, never):Bool;
+
+	inline function get_depleted()
+		return this.depleted;
+
+	@:to function dirty():Stream<Item, Error>
+		throw 1;
+
+	@:from static public function flatten<Item, Quality>(f:Future<Stream<Item, Quality>>):Stream<Item, Quality>
+		throw 1;
+
+	@:from static public function promise<Item, Quality>(f:Promise<Stream<Item, Quality>>):Stream<Item, Error> {
+		return flatten(f.map(function(o) return switch o {
+			case Success(s): s.dirty();
+			case Failure(e): throw 1;
+		}));
+	}
+}
+
+interface StreamObject<Item, Quality> {
+	var depleted(get, never):Bool;
+}

+ 1 - 0
tests/misc/projects/Issue9811/compile.hxml

@@ -0,0 +1 @@
+--main Main