Skip to content

Commit

Permalink
feat(sdk): add cloud.Counter for tf-gcp platform (#4731)
Browse files Browse the repository at this point in the history
Closes #628

## Checklist

- [x] Title matches [Winglang's style guide](https://www.winglang.io/contributing/start-here/pull_requests#how-are-pull-request-titles-formatted)
- [x] Description explains motivation and solution
- [x] Tests added (always)
- [ ] Docs updated (only required for features)
- [ ] Added `pr/e2e-full` label if this feature requires end-to-end testing

*By submitting this pull request, I confirm that my contribution is made under the terms of the [Wing Cloud Contribution License](https://github.com/winglang/wing/blob/main/CONTRIBUTION_LICENSE.md)*.
  • Loading branch information
garysassano authored Jan 20, 2024
1 parent ee58533 commit 7c4c355
Show file tree
Hide file tree
Showing 25 changed files with 724 additions and 118 deletions.
12 changes: 6 additions & 6 deletions docs/docs/04-standard-library/compatibility/compatibility.json
Original file line number Diff line number Diff line change
Expand Up @@ -297,35 +297,35 @@
"sim": { "implemented": true },
"tf-aws": { "implemented": true },
"tf-azure": { "implemented": false, "issue": 629 },
"tf-gcp": { "implemented": false, "issue": 628 },
"tf-gcp": { "implemented": true },
"awscdk": { "implemented": true }
},
"inc": {
"sim": { "implemented": true },
"tf-aws": { "implemented": true },
"tf-azure": { "implemented": false, "issue": 629 },
"tf-gcp": { "implemented": false, "issue": 628 },
"tf-gcp": { "implemented": true },
"awscdk": { "implemented": true }
},
"dec": {
"sim": { "implemented": true },
"tf-aws": { "implemented": true },
"tf-azure": { "implemented": false, "issue": 629 },
"tf-gcp": { "implemented": false, "issue": 628 },
"tf-gcp": { "implemented": true },
"awscdk": { "implemented": true }
},
"peek": {
"sim": { "implemented": true },
"tf-aws": { "implemented": true },
"tf-azure": { "implemented": false, "issue": 629 },
"tf-gcp": { "implemented": false, "issue": 628 },
"tf-gcp": { "implemented": true },
"awscdk": { "implemented": true }
},
"reset": {
"set": {
"sim": { "implemented": true },
"tf-aws": { "implemented": true },
"tf-azure": { "implemented": false, "issue": 629 },
"tf-gcp": { "implemented": false, "issue": 628 },
"tf-gcp": { "implemented": true },
"awscdk": { "implemented": true }
}
},
Expand Down
60 changes: 42 additions & 18 deletions examples/tests/sdk_tests/counter/dec.test.w
Original file line number Diff line number Diff line change
@@ -1,24 +1,48 @@
bring cloud;
bring expect;

let counter = new cloud.Counter(initial: 1);
// implicit initial (0)
let counter1 = new cloud.Counter() as "counter1";
// explicit initial
let counter2 = new cloud.Counter(initial: -1) as "counter2";

test "dec" {
assert(counter.peek() == 1);
let dec1 = counter.dec();
assert(counter.peek() == 0);
assert(dec1 == 1);
let dec2 = counter.dec(2);
assert(counter.peek() == -2);
assert(dec2 == 0);
test "dec()" {
// implicit decrement (-1)
let r0 = counter1.dec();
expect.equal(r0, 0);
expect.equal(counter1.peek(), -1);

// explicit decrement (positive int)
let r1 = counter1.dec(5);
expect.equal(r1, -1);
expect.equal(counter1.peek(), -6);

// explicit decrement (negative int)
let r2 = counter1.dec(-4);
expect.equal(r2, -6);
expect.equal(counter1.peek(), -2);

// explicit decrement (-0)
let r3 = counter1.dec(0);
expect.equal(r3, -2);
expect.equal(counter1.peek(), -2);
}

test "key dec" {
let key = "my-key";
assert(counter.peek(key) == 1);
let dec1 = counter.dec(nil, key);
assert(counter.peek(key) == 0);
assert(dec1 == 1);
let dec2 = counter.dec(2, key);
assert(counter.peek(key) == -2);
assert(dec2 == 0);
test "dec() with custom key" {
let key = "custom-key";

// explicit decrement (positive int)
let r1 = counter2.dec(5, key);
expect.equal(r1, -1);
expect.equal(counter2.peek(key), -6);

// explicit decrement (negative int)
let r2 = counter2.dec(-4, key);
expect.equal(r2, -6);
expect.equal(counter2.peek(key), -2);

// explicit decrement (-0)
let r3 = counter2.dec(0, key);
expect.equal(r3, -2);
expect.equal(counter2.peek(key), -2);
}
72 changes: 43 additions & 29 deletions examples/tests/sdk_tests/counter/inc.test.w
Original file line number Diff line number Diff line change
@@ -1,34 +1,48 @@
bring cloud;
bring expect;

let counter = new cloud.Counter(initial: 0);

test "inc" {
assert(counter.peek() == 0);
let r0 = counter.inc();
assert(r0 == 0);
assert(counter.peek() == 1);
let r1 = counter.inc();
assert(r1 == 1);
assert(counter.peek() == 2);
let r2 = counter.inc(10);
assert(r2 == 2);
assert(counter.peek() == 12);
let r3 = counter.inc();
assert(r3 == 12);
// implicit initial (0)
let counter1 = new cloud.Counter() as "counter1";
// explicit initial
let counter2 = new cloud.Counter(initial: -1) as "counter2";

test "inc()" {
// implicit increment (+1)
let r0 = counter1.inc();
expect.equal(r0, 0);
expect.equal(counter1.peek(), 1);

// explicit increment (positive int)
let r1 = counter1.inc(5);
expect.equal(r1, 1);
expect.equal(counter1.peek(), 6);

// explicit increment (negative int)
let r2 = counter1.inc(-4);
expect.equal(r2, 6);
expect.equal(counter1.peek(), 2);

// explicit increment (+0)
let r3 = counter1.inc(0);
expect.equal(r3, 2);
expect.equal(counter1.peek(), 2);
}

test "key inc" {
let key = "my-key";
assert(counter.peek(key) == 0);
let r0 = counter.inc(nil, key);
assert(r0 == 0);
assert(counter.peek(key) == 1);
let r1 = counter.inc(nil, key);
assert(r1 == 1);
assert(counter.peek(key) == 2);
let r2 = counter.inc(10, key);
assert(r2 == 2);
assert(counter.peek(key) == 12);
let r3 = counter.inc(nil, key);
assert(r3 == 12);
test "inc() with custom key" {
let key = "custom-key";

// explicit increment (positive int)
let r1 = counter2.inc(5, key);
expect.equal(r1, -1);
expect.equal(counter2.peek(key), 4);

// explicit increment (negative int)
let r2 = counter2.inc(-4, key);
expect.equal(r2, 4);
expect.equal(counter2.peek(key), 0);

// explicit increment (+0)
let r3 = counter2.inc(0, key);
expect.equal(r3, 0);
expect.equal(counter2.peek(key), 0);
}
7 changes: 4 additions & 3 deletions examples/tests/sdk_tests/counter/initial.test.w
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
bring cloud;
bring expect;

let counterA = new cloud.Counter() as "counterA";
let counterB = new cloud.Counter(initial: 500) as "counterB";
let counterC = new cloud.Counter(initial: -198) as "counterC";

test "initial:default" {
assert(counterA.peek() == 0);
expect.equal(counterA.peek(), 0);
}

test "initial:positive-value" {
assert(counterB.peek() == 500);
expect.equal(counterB.peek(), 500);
}

test "initial:negative-value" {
assert(counterC.peek() == -198);
expect.equal(counterC.peek(), -198);
}
13 changes: 7 additions & 6 deletions examples/tests/sdk_tests/counter/peek.test.w
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
bring cloud;
bring expect;

let c = new cloud.Counter();

test "peek" {
assert(c.peek() == 0);
assert(c.peek() == 0);
expect.equal(c.peek(), 0);
expect.equal(c.peek(), 0);
c.inc();
assert(c.peek() == 1);
expect.equal(c.peek(), 1);
}

test "key peek" {
let key = "my-key";
assert(c.peek(key) == 0);
assert(c.peek(key) == 0);
expect.equal(c.peek(key), 0);
expect.equal(c.peek(key), 0);
c.inc(nil, key);
assert(c.peek(key) == 1);
expect.equal(c.peek(key), 1);
}
57 changes: 33 additions & 24 deletions examples/tests/sdk_tests/counter/set.test.w
Original file line number Diff line number Diff line change
@@ -1,28 +1,37 @@
bring cloud;
bring expect;

let counter = new cloud.Counter(initial: 0);

test "set" {
assert(counter.peek() == 0);
counter.inc();
assert(counter.peek() == 1);
counter.inc();
assert(counter.peek() == 2);
counter.inc(10);
assert(counter.peek() == 12);
counter.set(88);
assert(counter.peek() == 88);
// implicit initial (0)
let counter1 = new cloud.Counter() as "counter1";
// explicit initial
let counter2 = new cloud.Counter(initial: -1) as "counter2";

test "set()" {
// set (positive int)
counter1.set(42);
expect.equal(counter1.peek(), 42);

// set (negative int)
counter1.set(-100);
expect.equal(counter1.peek(), -100);

// set (0)
counter1.set(0);
expect.equal(counter1.peek(), 0);
}

test "key set" {
let key = "my-key";
assert(counter.peek(key) == 0);
counter.inc(nil, key);
assert(counter.peek(key) == 1);
counter.inc(nil, key);
assert(counter.peek(key) == 2);
counter.inc(10, key);
assert(counter.peek(key) == 12);
counter.set(88, key);
assert(counter.peek(key) == 88);
}
test "set() with custom key" {
let key = "custom-key";

// set (positive int)
counter2.set(42, key);
expect.equal(counter2.peek(key), 42);

// set (negative int)
counter2.set(-100, key);
expect.equal(counter2.peek(key), -100);

// set (0)
counter2.set(0, key);
expect.equal(counter2.peek(key), 0);
}
10 changes: 10 additions & 0 deletions libs/wingsdk/.projen/deps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions libs/wingsdk/.projen/tasks.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions libs/wingsdk/.projenrc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ const project = new cdk.JsiiProject({
"@azure/core-paging",
// gcp client dependencies
"@google-cloud/[email protected]",
"@google-cloud/[email protected]",
"google-auth-library",
"[email protected]",
// simulator dependencies
"express",
"uuid",
Expand Down
4 changes: 4 additions & 0 deletions libs/wingsdk/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 7c4c355

Please sign in to comment.