Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feat(sdk): std.Set tests #4432

Merged
merged 8 commits into from
Oct 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion examples/tests/invalid/container_types.test.w
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,16 @@ let a: Array<str> = MutArray<str>[];
// ^^^^^^^^^^^^^^^ Expected type to be "Array<str>", but got "MutArray<str>" instead

let mm1: MutMap<num> = { "a" => 1, "b" => 2, "c" => 3 };
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected type to be "MutMap<num>", but got "Map<num>" instead
let mm2 = MutMap<num> { "a" => 1, "b" => 2, "c" => 3 };
let mm3 = mm2.copyMut();
let mm3 = mm2.copyMut();
// ^^^^^^^ Unknown symbol "copyMut"


let ss1: MutSet<str> = Set{"c"};
// ^^^^^ Expected type to be "MutSet<str>", but got "Set<str>" instead
let ss2: MutSet<num> = MutSet<num> {true};
// ^^^^ Expected type to be "num", but got "bool" instead
let ss3 = MutSet<bool> {false, true};
let ss4 = ss3.copyMut();
// ^^^^^^^ Unknown symbol "copyMut"
23 changes: 22 additions & 1 deletion examples/tests/invalid/immutable_container_types.test.w
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,30 @@ m1.set("a", "bye");
// ^^^ Unknown symbol "set" (TODO: better error message https://github.com/winglang/wing/issues/1660)

let m2: Map<str> = MutMap<str> {};
// ^^^^^^^^^^^^^^ Expected type to be "Map<str>", but got "MutMap<str>" instead
let m3 = Map<bool> { "a" => "A" };
// ^^^ Expected type to be "bool", but got "str" instead
let m4 = {"1" => 1, "2" => 2 };
m4.set("2", 3);
// ^^^ Unknown symbol "set"
let m5 = m4.copy();
// ^^^^ Unknown symbol "copy"
m4.delete("1");
m4.clear();
// ^^^^^^ Unknown symbol "delete"
m4.clear();
// ^^^^^ Unknown symbol "clear"


let s1: Set<Array<num>> = MutSet<Array<num>> {[1]};
// ^^^^^^^^^^^^^^^^^^^^^^^^ Expected type to be "Set<Array<num>>", but got "MutSet<Array<num>>" instead
let s2 = Set<str> {"a", "b", "c"};
s2.delete("a");
// ^^^^^^ Unknown symbol "delete"
s2.add("d");
// ^^^ Unknown symbol "add"
let s3 = s2.copy();
// ^^^^ Unknown symbol "copy"
s2.clear();
// ^^^^^ Unknown symbol "clear"
let s4: Set<bool> = {[3]};
// ^^^^^ Expected type to be "Set<bool>", but got "Set<Array<num>>" instead
4 changes: 1 addition & 3 deletions examples/tests/sdk_tests/std/map.test.w
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
//-----------------------------------------------------------------------------
// TODO: https://github.com/winglang/wing/issues/2785

//-----------------------------------------------------------------------------
// keys()
let m = { "hello" => 123, "world" => 99 };
Expand All @@ -16,6 +13,7 @@ assert(mvalues.length == 2);
assert(mvalues.at(0) == 123);
assert(mvalues.at(1) == 99);


// container types are equal regardless of the mutability if they have the same
// content but in all scenraios the type is specified for better readability

Expand Down
192 changes: 188 additions & 4 deletions examples/tests/sdk_tests/std/set.test.w
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
//-----------------------------------------------------------------------------
// TODO: https://github.com/winglang/wing/issues/2785

//-----------------------------------------------------------------------------
// toArray()
let mySet = Set<num> {1, 2, 3};
Expand All @@ -18,4 +15,191 @@ assert(myArrayFromMutSet.at(1) == "b");
assert(myArrayFromMutSet.at(2) == "c");
assert(myArrayFromMutSet.length == myMutSet.size);
assert(myArrayFromMutSet.length == 3);
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------


// container types are equal regardless of the mutability if they have the same
// content but in all scenraios the type is specified for better readability

assert(Set<num>{1, 2} == MutSet<num>{1, 2});
assert(Set<bool>{true, false} == MutSet<bool>{false, true});

test "equality"{
assert(Set<num>{1, 2} == MutSet<num>{1, 2});
assert(Set<bool>{true, false} == MutSet<bool>{false, true});
}


let openings = MutSet<str> {"A Cruel Angel's Thesis", "Lilium", "Unravel", "TOP"};
let immutOpenings: Set<str> = openings.copy();
assert(immutOpenings.copyMut() == openings);
openings.add("Abnormalize");
assert(openings.has("Abnormalize"));
openings.delete("TOP");
assert(openings.has("TOP") == false);
openings.clear();
assert(openings.size == 0);

test "mutability" {
let openings = MutSet<str> {"A Cruel Angel's Thesis", "Lilium", "Unravel", "TOP"};
let immutOpenings: Set<str> = openings.copy();
assert(immutOpenings.copyMut() == openings);
openings.add("Abnormalize");
assert(openings.has("Abnormalize"));
openings.delete("TOP");
assert(openings.has("TOP") == false);
openings.clear();
assert(openings.size == 0);
}


let maleVA = {"Kenjiro Tsuda", "Akira Ishida", "Yoshitsugu Matsuoka"};
assert(maleVA.size == 3);

let femaleVA = MutSet<str>{"Saori Hayami", "Miyuki Sawashiro"};
assert(femaleVA.size == 2);
femaleVA.add("Maaya Sakamoto");
assert(femaleVA.size == 3);
femaleVA.clear();
assert(femaleVA.size == 0);

test "size()" {
let maleVA = {"Kenjiro Tsuda", "Akira Ishida", "Yoshitsugu Matsuoka"};
assert(maleVA.size == 3);

let femaleVA = MutSet<str>{"Saori Hayami", "Miyuki Sawashiro"};
assert(femaleVA.size == 2);
femaleVA.add("Maaya Sakamoto");
assert(femaleVA.size == 3);
femaleVA.clear();
assert(femaleVA.size == 0);
}


let genre = {"isekai", "mecha", "cyberpunk"};
assert(genre.has("drama") == false);
assert(genre.has("mecha"));

let mutGenre = MutSet<str> {"rom-com", "sports", "sci-fi"};
assert(mutGenre.has("psychological") == false);
assert(mutGenre.has("rom-com"));
mutGenre.delete("rom-com");
mutGenre.add("psychological");
assert(mutGenre.has("psychological"));
assert(mutGenre.has("rom-com") == false);

test "has()" {
let genre = {"isekai", "mecha", "cyberpunk"};
assert(genre.has("drama") == false);
assert(genre.has("mecha"));

let mutGenre = MutSet<str> {"rom-com", "sports", "sci-fi"};
assert(mutGenre.has("psychological") == false);
assert(mutGenre.has("rom-com"));
mutGenre.delete("rom-com");
mutGenre.add("psychological");
assert(mutGenre.has("psychological"));
assert(mutGenre.has("rom-com") == false);
}


let endings = Set<bool>{};
assert(endings.toArray() == Array<bool>[]);
let strEndings = {"Somewhere, Faraway, Everyone is Listening to a Ballad"};
assert(strEndings.toArray() == ["Somewhere, Faraway, Everyone is Listening to a Ballad"]);
let copyEndings = endings.copyMut();
assert(copyEndings.toArray() == endings.toArray());

let mutEndings = MutSet<Array<str>> {["Fly Me To The Moon", "Slump"], ["Heikousen"]};
assert(mutEndings.toArray() == [["Fly Me To The Moon", "Slump"], ["Heikousen"]]);
mutEndings.add(["Wagamama"]);
assert(mutEndings.toArray() == [["Fly Me To The Moon", "Slump"], ["Heikousen"], ["Wagamama"]]);
let immutEndings = mutEndings.copy();
assert(immutEndings.toArray() == mutEndings.toArray());

test "toArray()" {
let endings = Set<bool>{};
assert(endings.toArray() == Array<bool>[]);
let strEndings = {"Somewhere, Faraway, Everyone is Listening to a Ballad"};
assert(strEndings.toArray() == ["Somewhere, Faraway, Everyone is Listening to a Ballad"]);
let copyEndings = endings.copyMut();
assert(copyEndings.toArray() == endings.toArray());

let mutEndings = MutSet<Array<str>> {["Fly Me To The Moon", "Slump"], ["Heikousen"]};
assert(mutEndings.toArray() == [["Fly Me To The Moon", "Slump"], ["Heikousen"]]);
mutEndings.add(["Wagamama"]);
assert(mutEndings.toArray() == [["Fly Me To The Moon", "Slump"], ["Heikousen"], ["Wagamama"]]);
let immutEndings = mutEndings.copy();
assert(immutEndings.toArray() == mutEndings.toArray());
}


let talkingQuirks = {"dattebane", "battebayo", "dattebasa"};
assert(talkingQuirks.copyMut() == MutSet<str> {"dattebane", "battebayo", "dattebasa"});

test "copyMut()" {
let talkingQuirks = {"dattebane", "battebayo", "dattebasa"};
assert(talkingQuirks.copyMut() == MutSet<str> {"dattebane", "battebayo", "dattebasa"});
}


let evaRebuild = MutSet<num> {1.11, 2.22, 3.33};
evaRebuild.add(3.0+1.0);
assert(evaRebuild.has(3.0+1.0));
assert(evaRebuild == MutSet<num>{1.11, 2.22, 3.33, 3.0+1.0});

test "add()" {
let evaRebuild = MutSet<num> {1.11, 2.22, 3.33};
evaRebuild.add(3.0+1.0);
assert(evaRebuild.has(3.0+1.0));
assert(evaRebuild == MutSet<num>{1.11, 2.22, 3.33, 3.0+1.0});
}


let studios = MutSet<str> {"Gainax", "Ghibli", "Production I.G.", "Shaft"};
assert(studios.delete("Gainax"));
assert(studios.has("Gainax") == false);
assert(studios.delete("Sunrise") == false);
assert(studios.size == 3);

test "delete()" {
let studios = MutSet<str> {"Gainax", "Ghibli", "Production I.G.", "Shaft"};
assert(studios.delete("Gainax"));
assert(studios.has("Gainax") == false);
assert(studios.delete("Sunrise") == false);
assert(studios.size == 3);
}


let demographics = MutSet<str> {"shounen", "shoujo", "josei", "seinen"};
demographics.clear();
assert(demographics.size == 0);
demographics.add("kodomo");
demographics.clear();
assert(demographics.has("kodomo") == false);

test "clear()" {
let demographics = MutSet<str> {"shounen", "shoujo", "josei", "seinen"};
demographics.clear();
assert(demographics.size == 0);
demographics.add("kodomo");
demographics.clear();
assert(demographics.has("kodomo") == false);
}


let acronyms = MutSet<Map<str>> {{"SEL" => "Serial Experiments Lain", "NGE" => "Neon Genesis Evangelion"}};
let copyAcronyms = acronyms.copy();
assert(copyAcronyms == {{"SEL" => "Serial Experiments Lain", "NGE" => "Neon Genesis Evangelion"}});
acronyms.add({"DomeKano" => "Domestic na Kanojo"});
let copyAcronymsNew = acronyms.copy().copyMut();
assert(copyAcronymsNew == acronyms);

test "copy()" {
let acronyms = MutSet<Map<str>> {{"SEL" => "Serial Experiments Lain", "NGE" => "Neon Genesis Evangelion"}};
let copyAcronyms = acronyms.copy();
assert(copyAcronyms == {{"SEL" => "Serial Experiments Lain", "NGE" => "Neon Genesis Evangelion"}});
acronyms.add({"DomeKano" => "Domestic na Kanojo"});
let copyAcronymsNew = acronyms.copy().copyMut();
assert(copyAcronymsNew == acronyms);
}
Loading