using Invercargill; void remaining_components_tests() { // Generators tests Test.add_func("/invercargill/generators/deferred/simple", () => { var counter = 0; var deferred = Iterate.deferred(() => { return Iterate.range(counter, counter + 3); }); var result1 = deferred.to_array(); assert(result1.length == 3); assert(result1[0] == 0); assert(result1[1] == 1); assert(result1[2] == 2); counter = 5; var result2 = deferred.to_array(); assert(result2.length == 3); assert(result2[0] == 5); assert(result2[1] == 6); assert(result2[2] == 7); }); Test.add_func("/invercargill/generators/empty/simple", () => { var empty = Iterate.nothing(); assert(empty.count() == 0); assert(empty.first_or_default() == 0); assert(empty.to_array().length == 0); }); // Function generator test skipped due to API complexity // Promotions tests Test.add_func("/invercargill/promotions/binary_data/simple", () => { var items = Wrap.array(new uint8[] { 1, 2, 3, 4, 5 }); var binary = items.promote_to(); assert(binary != null); // Test that it's still enumerable assert(binary.count() == 5); }); // Wrappers tests Test.add_func("/invercargill/wrappers/generic_array/simple", () => { var array = new GLib.GenericArray(); array.add(1); array.add(2); array.add(3); var wrapped = Wrap.generic_array(array); assert(wrapped.count() == 3); assert(wrapped.first_or_default() == 1); assert(wrapped.last_or_default() == 3); }); // Mapping tests - ValueMapper test skipped due to API complexity // Operators tests Test.add_func("/invercargill/operators/comparison/int", () => { var compare = Operators.comparison(); assert(compare(1, 2) < 0); assert(compare(2, 1) > 0); assert(compare(1, 1) == 0); }); Test.add_func("/invercargill/operators/equality/int", () => { var equals = Operators.equality(); assert(equals(1, 1)); assert(!equals(1, 2)); }); Test.add_func("/invercargill/operators/hash/int", () => { var hash = Operators.hash(); assert(hash(1) == hash(1)); assert(hash(1) != hash(2)); }); Test.add_func("/invercargill/operators/stringify/int", () => { var stringify = Operators.stringify(); assert(stringify(42) == "42"); assert(stringify(0) == "0"); }); Test.add_func("/invercargill/operators/stringify/string", () => { var stringify = Operators.stringify(); assert(stringify("hello") == "hello"); assert(stringify("world") == "world"); }); // Test composition functionality Test.add_func("/invercargill/composition/simple", () => { var composition = new Composition(); composition.append(Wrap.array(new int[] { 1, 2, 3 })); composition.append(Wrap.array(new int[] { 4, 5, 6 })); assert(composition.count() == 6); var result = composition.to_array(); for (int i = 0; i < 6; i++) { assert(result[i] == i + 1); } }); Test.add_func("/invercargill/composition/prepend", () => { var composition = new Composition(); composition.append(Wrap.array(new int[] { 4, 5, 6 })); composition.prepend(Wrap.array(new int[] { 1, 2, 3 })); assert(composition.count() == 6); var result = composition.to_array(); for (int i = 0; i < 6; i++) { assert(result[i] == i + 1); } }); Test.add_func("/invercargill/composition/clear", () => { var composition = new Composition(); composition.append(Wrap.array(new int[] { 1, 2, 3 })); assert(composition.count() == 3); composition.clear(); assert(composition.count() == 0); }); Test.add_func("/invercargill/composition/remove_where", () => { var composition = new Composition(); composition.append(Wrap.array(new int[] { 1, 2, 3, 4, 5 })); composition.remove_where(i => i % 2 == 0); assert(composition.count() == 3); var result = composition.to_array(); assert(result[0] == 1); assert(result[1] == 3); assert(result[2] == 5); }); Test.add_func("/invercargill/composition/remove_first_where", () => { var composition = new Composition(); composition.append(Wrap.array(new int[] { 1, 2, 3, 4, 5 })); composition.remove_first_where(i => i % 2 == 0); composition.debug_dump(); composition.debug_dump(); assert(composition.count() == 4); var result = composition.to_array(); assert(result[0] == 1); assert(result[1] == 3); assert(result[2] == 4); assert(result[3] == 5); }); // Test byte composition Test.add_func("/invercargill/byte_composition/simple", () => { var composition = new ByteComposition(); composition.append_byte_array(new uint8[] { 1, 2, 3 }); composition.append_byte_array(new uint8[] { 4, 5, 6 }); assert(composition.count() == 6); var result = composition.to_array(); for (int i = 0; i < 6; i++) { assert(result[i] == (uint8)(i + 1)); } }); // Test attempt functionality Test.add_func("/invercargill/attempt/success", () => { var attempt = new Attempt(() => 42); assert(attempt.success); assert(attempt.result == 42); }); Test.add_func("/invercargill/attempt/failure", () => { var attempt = new Attempt(() => { // Simulate failure by returning an error code return -1; }); // For this test, we'll just check it doesn't crash assert(attempt != null); }); // Test cache functionality Test.add_func("/invercargill/cache/simple", () => { var counter = 0; var items = Iterate.deferred(() => { counter++; return Iterate.range(0, 3); }); var cached = items.cache(); assert(cached.count() == 3); assert(counter == 1); // Second iteration should not increment counter assert(cached.count() == 3); assert(counter == 1); }); // Test proxy functionality Test.add_func("/invercargill/proxy/simple", () => { var items = Wrap.array(new int[] { 1, 2, 3 }); var proxy = items.seal(); // seal returns a proxy assert(proxy.count() == 3); var result = proxy.to_array(); assert(result[0] == 1); assert(result[1] == 2); assert(result[2] == 3); }); }