Comments (35)
@mgold , @rtfeldman :
This one is the smallest that fails
module HtmlRunnerExample exposing (..)
{-| HOW TO RUN THIS EXAMPLE ?
************************* WARNING !!!!!!! $ elm-reactor should be run from the tests directory !!!!*********************
Visit http://localhost:8000 and bring up this file.
-}
import Expect
import Test exposing (..)
import Test.Runner.Html
--import Fuzz exposing (..)
import Preprojectform exposing (..)
import Dict exposing (..)
import Fuzz exposing (list, int, tuple,intRange)
main : Program Never
main =
[ all
]
|> concat
|> Test.Runner.Html.run
all : Test
all =
describe "A Test Suite"
[ test "My current number of points" <|
\() ->
(List.sum <| Dict.values <| (fst Preprojectform.init).myScoreList)
|> Expect.greaterThan 0
, fuzz (intRange 1 50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 2000
]
and this one is the smallest that works :
module HtmlRunnerExample exposing (..)
{-| HOW TO RUN THIS EXAMPLE ?
************************* WARNING !!!!!!! $ elm-reactor should be run from the tests directory !!!!*********************
Visit http://localhost:8000 and bring up this file.
-}
import Expect
import Test exposing (..)
import Test.Runner.Html
--import Fuzz exposing (..)
import Preprojectform exposing (..)
import Dict exposing (..)
import Fuzz exposing (list, int, tuple,intRange)
main : Program Never
main =
[ all
]
|> concat
|> Test.Runner.Html.run
all : Test
all =
describe "A Test Suite"
[ test "Value of maxPointsPossible" <|
\() ->
(fst Preprojectform.init).listOfQuestions
|> List.length
|> (*) 3
|> Expect.equal 6
, fuzz (intRange 1 50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 2000
]```
from node-test-runner.
I just published a new version of node-test-runner
(get it by upgrading your elm-package.json
to say "rtfeldman/node-test-runner": "2.0.1 <= v < 3.0.0"
and by also running npm install -g elm-test
) - and it now prints out a seed at the start of each test run.
@NicolasUmiastowski @bdukes would you mind upgrading to the latest version, re-running, and then pasting in the --seed
argument to reproduce? It should look something like this:
If you can paste me that "To reproduce these results" line, I can try to reproduce locally.
Thanks!
from node-test-runner.
Just wanted to say, extra huge props to @mgold for fixing this and to @bdukes @benansell @NicolasUmiastowski for your hard work reproducing it.
Great work all around!
from node-test-runner.
On my windows box, included a fuzz test causes both the node and html runners to hang. I'll see if I can track down where that's happening.
from node-test-runner.
A quick debug session shows what looks like an infinite loop in a function named accountForBias
. The passed in seed
is an object that looks like { _0: 0, _1: 0, ctor: "Seed" }
, as is seedN
, and x
(the result from calling _mgold$elm_random_pcg$Random_Pcg$peel(seed)
) is always 0
. if (_elm_lang$core$Native_Utils.cmp(x, threshhold) < 0)
is always true
, so it gets stuck in that loop.
Here is that JS code, with some context:
var _mgold$elm_random_pcg$Random_Pcg$int = F2(
function (a, b) {
return _mgold$elm_random_pcg$Random_Pcg$Generator(
function (seed0) {
var _p64 = (_elm_lang$core$Native_Utils.cmp(a, b) < 0) ? {ctor: '_Tuple2', _0: a, _1: b} : {ctor: '_Tuple2', _0: b, _1: a};
var lo = _p64._0;
var hi = _p64._1;
var range = (hi - lo) + 1;
if (_elm_lang$core$Native_Utils.eq(
A2(_elm_lang$core$Bitwise$and, range, range - 1),
0)) {
return {
ctor: '_Tuple2',
_0: A2(
_elm_lang$core$Bitwise$shiftRightLogical,
A2(
_elm_lang$core$Bitwise$and,
_mgold$elm_random_pcg$Random_Pcg$peel(seed0),
range - 1),
0),
_1: _mgold$elm_random_pcg$Random_Pcg$next(seed0)
};
} else {
var threshhold = A2(
_elm_lang$core$Bitwise$shiftRightLogical,
A2(
_elm_lang$core$Basics$rem,
A2(_elm_lang$core$Bitwise$shiftRightLogical, 0 - range, 0),
range),
0);
var accountForBias = function (seed) {
accountForBias:
while (true) {
var seedN = _mgold$elm_random_pcg$Random_Pcg$next(seed);
var x = _mgold$elm_random_pcg$Random_Pcg$peel(seed);
if (_elm_lang$core$Native_Utils.cmp(x, threshhold) < 0) {
var _v26 = seedN;
seed = _v26;
continue accountForBias;
} else {
return {
ctor: '_Tuple2',
_0: A2(_elm_lang$core$Basics$rem, x, range) + lo,
_1: seedN
};
}
}
};
return accountForBias(seed0);
}
});
});
Note that, even though the first line here ends with int
, that this occurs just the same when using Fuzz.string
.
from node-test-runner.
Wow, crazy! @mgold thoughts?
from node-test-runner.
Hi, I have a unit test suite that runs nice, but when I add a fuzz test, and want to run the page on localhost, on windows, it fails to lad, something seems to loop indefinitely, preventign the page form loading. It also provokes the console to stop there, I can do nothing after lauching the tests.
Here is the code, the problematic is the last one (a fuzz test)
module HtmlRunnerExample exposing (..)
{-| HOW TO RUN THIS EXAMPLE
$ elm-reactor
Visit http://localhost:8000 and bring up this file.
-}
import Expect
import Test exposing (..)
import Test.Runner.Html
--import Fuzz exposing (..)
import Preprojectform exposing (..)
import Dict exposing (..)
import Fuzz exposing (list, int, tuple,intRange)
main : Program Never
main =
[ all
]
|> concat
|> Test.Runner.Html.run
all : Test
all =
describe "A Test Suite"
[ test "Addition" <|
\() ->
Expect.equal (3 + 7) 10
{-, test "This test should fail" <|
\() ->
Expect.fail "failed as expected!"-}
, test "Length of listOfQuestions" <|
\() ->
(fst Preprojectform.init).listOfQuestions
|> List.length
|> Expect.equal 2
, test "Value of maxPointsPossible" <|
\() ->
(fst Preprojectform.init).listOfQuestions
|> List.length
|> (*) 3
|> Expect.equal 6
{-, test "My current number of points" <|
\() ->
(List.sum <| Dict.values <| (fst Preprojectform.init).myScoreList)
|> Expect.greaterThan 0 -}
{-, test "My current number of points" <|
\() ->
let
myScore =
(fst Preprojectform.init).myScoreList
myCurrentNumberofPoints =
List.sum <| Dict.values <| myScore
in
if isEmpty myScore then
myCurrentNumberofPoints |> Expect.equal 0
else
myCurrentNumberofPoints |> Expect.greaterThan 0-}
, test "My scoreList" <|
\() ->
(fst Preprojectform.init)
|> Preprojectform.update (Preprojectform.QuestionAnswered 1 3)
|> fst
|> Preprojectform.update (Preprojectform.QuestionAnswered 2 3)
|> fst
|> .myScoreList
|> Expect.equal (Dict.fromList [(1,3), (2,3)])
, test "My current number of points" <|
\() ->
(fst Preprojectform.init)
|> Preprojectform.update (Preprojectform.QuestionAnswered 1 3)
|> fst
|> Preprojectform.update (Preprojectform.QuestionAnswered 2 3)
|> fst
|> Preprojectform.update (Preprojectform.Send 100)
|> fst
|> .scoreMessage
|> Expect.equal "Your score is 100% Bravo"
, fuzz (intRange 1 50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 2000
]
from node-test-runner.
@NicolasUmiastowski The test works (fails as expected) on a Mac, which is the only machine I have access to. Very strange! BTW next time please get rid of as much extraneous code as necessary, which here is non-fuzz tests. Unless the issue only happens when those tests are present?
@bdukes Can you provide minimal Elm code that reproduces the issue you are seeing? Seed 0 0
should not be possible!
from node-test-runner.
@mgold , @rtfeldman :
OK I re-tried and I can confirm you that :
actually it fails ONLY when I have the whole code above (unit tests + the fuzz test - even if the fuzz test is the last or the first or at another place)
When I keep only the fuzz test in the code, it works (both in the console and also in localhost when I add it to HtmlRunnerExample.elm) :
module Tests exposing (..)
import Test exposing (..)
import Expect
--import Dict exposing (..)
import Fuzz exposing (list, int, tuple,intRange)
import Preprojectform exposing (..)
import Dict exposing (..)
all : Test
all =
describe "A Test Suite"
[ fuzz (intRange -1 -50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 2000
]```
from node-test-runner.
@mgold , @rtfeldman :
Pehaps it has something to do with whitespaces, empty lines or something like this, but I AM NOT SURE.
The example below (where I deleteted some empty lines between the tests) works sometimes but not always (1 time out of 5 tries.....)
module HtmlRunnerExample exposing (..)
{-| HOW TO RUN THIS EXAMPLE ?
************************* WARNING !!!!!!! $ elm-reactor should be run from the tests directory !!!!*********************
Visit http://localhost:8000 and bring up this file.
-}
import Expect
import Test exposing (..)
import Test.Runner.Html
--import Fuzz exposing (..)
import Preprojectform exposing (..)
import Dict exposing (..)
import Fuzz exposing (list, int, tuple,intRange)
main : Program Never
main =
[ all
]
|> concat
|> Test.Runner.Html.run
all : Test
all =
describe "A Test Suite"
[ test "One addition" <|
\() ->
Expect.equal (3 + 7) 10
, test "My current number of points" <|
\() ->
(fst Preprojectform.init)
|> Preprojectform.update (Preprojectform.QuestionAnswered 1 3)
|> fst
|> Preprojectform.update (Preprojectform.QuestionAnswered 2 3)
|> fst
|> Preprojectform.update (Preprojectform.Send 100)
|> fst
|> .scoreMessage
|> Expect.equal "Your score is 100% Bravo"
, fuzz (intRange 1 50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 2000
]
from node-test-runner.
It seems that it's less common an issue when there's only one fuzz test. I'm not able to reproduce the issue with just one fuzz test all by itself, but adding another test (fuzz or regular) before the fuzz test seems to cause it to happen (adding a test after the fuzz test did not seem to trigger the hang). It hangs regardless of whether either test passes or fails.
This causes a hang about 4 in 5 times:
port module Main exposing (..)
import Test.Runner.Node exposing (run)
import Json.Encode exposing (Value)
import Expect
import Test exposing (..)
import Fuzz exposing (list, int, tuple, intRange)
all : Test
all =
describe "A Test Suite"
[ fuzz (list int) "List length" <|
\numbers ->
List.length (List.reverse numbers)
|> Expect.equal (List.length numbers)
, fuzz (intRange 1 50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 20
]
main : Program Never
main =
run emit all
port emit : ( String, Value ) -> Cmd msg
This causes a hang about 1 in 10 times:
port module Main exposing (..)
import Test.Runner.Node exposing (run)
import Json.Encode exposing (Value)
import Expect
import Test exposing (..)
import Fuzz exposing (list, int, tuple, intRange)
all : Test
all =
describe "A Test Suite"
[ test "List length" <|
\() ->
List.length (List.reverse [1, 2, 3])
|> Expect.equal 3
, fuzz (intRange 1 50) "Fuzz test for Integer" <|
\myInt ->
(myInt * 200) // 5
|> Expect.greaterThan 20
]
main : Program Never
main =
run emit all
port emit : ( String, Value ) -> Cmd msg
from node-test-runner.
Okay, so after trying a variation of @NicolasUmiastowski's "smallest one that fails" (variation because I don't have the Preprojectform
source), I was able to see some hanging behavior on Mac/Chrome. I noticed that Chrome reported "Waiting on fonts.googleapis.com", which on further investigation appears to be GET http://fonts.googleapis.com/css?family=Source+Sans+Pro, which comes from an @import
in a <style>
in <head>
. So if this is indeed the cause of the hangs you've been seeing, it has nothing to do with elm-test. (The import should be removed from the reactor because the body text is done properly: font-family: monospace
which picks up system Courier.)
If you run elm make HtmlRunnerExample.elm
the @import
will not be present in index.html
. Try loading that file repeatedly and see if you can produce a hang.
from node-test-runner.
@mgold I'm seeing the hanging (on Windows) using the elm-test
command line utility, not just in elm-reactor
.
from node-test-runner.
@mgold Same for me. : " I'm seeing the hanging (on Windows) using the elm-test command line utility, not just in elm-reactor."
And just to make it clear, I jut want to help here.
Here is the code of Preprojectform.elm
module Preprojectform exposing (Model,init,view,update,Msg(..))
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.App as Html
import Html.Events exposing (onClick, onCheck)
import Dict exposing (..)
import Debug
-- import Debug
main : Program Never
main =
Html.program
{ init = init
, view = view
, subscriptions = subscriptions
, update = update
}
-- MODEL
type alias Model =
{ myScoreList : Dict Int Int
,listOfAnswers : List { myText: String, myValue: Int}
,listOfQuestions : List { questionId: Int, questionText : String }
,scoreMessage : String
,errrorMessage : String
}
init : (Model, Cmd Msg)
init =
(Model Dict.empty [{myText = "Fully agree", myValue = 3}, {myText = "Agree", myValue = 2}, {myText = "Neutral", myValue = 1}, {myText = "Disagree", myValue=0}] [{questionId = 1, questionText = "Is the business co-located with the developers?"}, {questionId = 2, questionText = "Is the scope flexible?"}] "" "", Cmd.none)
--MESSAGES
type Msg =
QuestionAnswered Int Int
| Send Int
--VIEW
view
: Model
-> Html Msg
view model =
let
displayListOfQuestions = List.concatMap (\question -> text question.questionText :: List.map (createAnswerButtons question.questionId) model.listOfAnswers) model.listOfQuestions
maxPointsPossible : Int
maxPointsPossible = List.length model.listOfQuestions * 3
myCurrentNumberofPoints = List.sum <| Dict.values <| model.myScoreList
myTotalScore : Int
myTotalScore = (myCurrentNumberofPoints * 100) // maxPointsPossible
in
div []
<|displayListOfQuestions ++
[ br [] []
, button [onClick (Send myTotalScore) ] [text "Send"]
, br [] []
, br [] []
, text model.scoreMessage
, text model.errrorMessage
]
createAnswerButtons : Int -> { a | myText : String, myValue : Int } -> Html Msg
createAnswerButtons questionId answersPair =
div[]
[ text (answersPair.myText)
, input [ type' "radio", name ("myChoice" ++ toString questionId), onCheck (\_ -> QuestionAnswered questionId answersPair.myValue)] []
]
--UPDATE
update
: Msg
-> Model
-> ( Model, Cmd b)
update msg model =
case msg of
QuestionAnswered questionId answersId ->
let
newScoreList = Dict.insert questionId answersId model.myScoreList
in
({ model | myScoreList = Debug.log "myscorelist" newScoreList }, Cmd.none )
Send myTotalScore ->
let
myAnsweredQuestions = List.length <| Dict.values <| model.myScoreList
newScoreMessage =
if (myAnsweredQuestions == 2 && myTotalScore >= 75) then
"Your score is " ++ toString myTotalScore ++ "% " ++ "Bravo"
else
if (myAnsweredQuestions == 2 && myTotalScore < 75) then
"Your score is " ++ toString myTotalScore ++ "% " ++ "Not so bad"
else ""
newErrorMessage =
if ((List.length <| Dict.values <| model.myScoreList) < 2) then
"You must answer all questions!"
else
""
in
({ model | scoreMessage = newScoreMessage , errrorMessage = newErrorMessage }, Cmd.none )
--SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
`
from node-test-runner.
Nicholas, sorry for the snarky comment. I'm at the SF meetup now, and apparently someone repo'd it on OS X, so we'll dig in shortly.
Also Evan says he's moved the CSS import to the bottom of the file, on master.
from node-test-runner.
Has anyone been able to reproduce this on any other platform than Windows?
from node-test-runner.
Wow it works now with the fuzz test :)
here is the line :
To reproduce these results, run: elm-test --seed 921421987
coool!
from node-test-runner.
@NicolasUmiastowski ok cool! So the next time it hangs, can you paste this again? (The number will be different next time, since it is randomly generated at the start of each run.)
This will help me reproduce it. If I have that seed number and your code, I can re-run the exact tests on my machine, and all the fuzz values will be the same as the ones that you had. 😄
from node-test-runner.
ok cool. but as it works now, it will hopefully not fail again :)
let's see :)
from node-test-runner.
I'm still seeing hanging.
Seeds that hang include:
- 2082731988
- 1486799622
- 478853078
- 1443275616
- 494046381
Seeds that complete include:
- 1125685972
- 1854048834
- 422094152
- 951047110
- 1679977496
Hope it helps!
from node-test-runner.
@bdukes ok cool! can you link to the code that reproduces the hanging with these seeds?
from node-test-runner.
The code is https://gist.github.com/bdukes/37df29534fc83ca56c1292f61f26d3d3
from node-test-runner.
Hey @bdukes, I downloaded the zip from the gist, ran npm update -g elm-test
, and then in the gist folder ran elm test Main.elm --seed=2082731988
for each of the seeds you list as hanging, and was unable to reproduce the hang. That is, the suite completed (with two failed tests) almost instantly every time. Have you tried running each of the hanging seeds a times each to confirm that they always cause a hang? Have you tried running the non-hanging seeds a few times each to confirm they never hang? (Sorry if this sounds like nagging!)
from node-test-runner.
@mgold, no problem, I hadn't actually tried re-running any of those seeds to verify whether they consistently caused a hang or not. Now that I have, it does seem consistent. I can run elm-test --seed=1854048834
20 times without a hang, and elm-test --seed 1486799622
has hung five times in a row.
Hope it helps!
from node-test-runner.
And this is only hanging on Windows, yeah?
On Mon, Aug 22, 2016, 12:10 PM Brian Dukes [email protected] wrote:
@mgold https://github.com/mgold, no problem, I hadn't actually tried
re-running any of those seeds to verify whether they consistently caused a
hang or not. Now that I have, it does seem consistent. I can run elm-test
--seed=1854048834 20 times without a hang, and elm-test --seed 1486799622
has hung five times in a row.Hope it helps!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#53 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABCxwEfyjT3DDzCq-eqGrLiN3mXJHxCaks5qifQggaJpZM4JhVj-
.
from node-test-runner.
from node-test-runner.
Got it. Out of curiosity, can you reproduce this in the html test runner on Chrome, Firefox, and IE (or Edge)?
I ask because the node test runner would be using v8 under the hood just like Chrome, so I wonder if the bug might be specific to v8 on windows.
from node-test-runner.
from node-test-runner.
Thanks to the test case from @bdukes I was able to put together a small repo that runs the test case with the "good seeds" (test fails without hanging) and "hang seeds".
The travis build (linux) runs fine, however the appveyor (windows) build fails every time on the 1486799622 seed regardless which version of nodejs is being used.
I have also added some debug lines to the output to see if it was possible to record it getting stuck - sadly that didn't work. However, it does show that the linux and windows builds are getting different "seed" values in the when running the "good seed" tests (unless I am miss reading the output):
all : Test
all =
describe "A Test Suite"
[ test "Addition" <|
\() ->
Expect.equal (3 + 7) 10
|> Debug.log "--------- Addition test complete ---------"
, fuzz Fuzz.int "variable addition" <|
\a ->
Expect.equal (3 + a + 2) (a + 6)
|> Debug.log (toString a)
, test "This test should fail" <|
\() ->
Expect.fail "failed as expected!"
|> Debug.log "--------- Failed test complete ---------"
]
elm-test
--------
Running 3 tests. To reproduce these results, run: elm-test --seed 1125685972
--------- Addition test complete ---------: Pass
42: Fail "" "48\n╷\n│ Expect.equal\n╵\n47"
0: Fail "" "6\n╷\n│ Expect.equal\n╵\n5"
0: Fail "" "6\n╷\n│ Expect.equal\n╵\n5"
10: Fail "" "16\n╷\n│ Expect.equal\n╵\n15"
elm-test
--------
Running 3 tests. To reproduce these results, run: elm-test --seed 1125685972
--------- Addition test complete ---------: Pass
-1682754193: Fail "" "-1682754187\n╷\n│ Expect.equal\n╵\n-1682754188"
1682754193: Fail "" "1682754199\n╷\n│ Expect.equal\n╵\n1682754198"
0: Fail "" "6\n╷\n│ Expect.equal\n╵\n5"
0: Fail "" "6\n╷\n│ Expect.equal\n╵\n5
from node-test-runner.
Hmm, it's pretty clear that there's some kind of windows or windows-version-of-JS-engine bug involving arithmetic or bitwise ops. I'm really not sure what to do about it.
Looking at that output did illustrate another point. Notice there are lots of zeros; this is due to shrinking. It's expected that a test may be rerun many times as values are shrunk but zero always appears twice. Turns out we we calling the test once more than we needed at the very end. Not doing that improved performance about 5-10% when shrinking tuples (which can do a lot of shrink steps, so to get perf out of saving only one is a pleasant surprise). This ought to make it into 2.1.0.
But back on topic, yeah, I have no idea. :(
from node-test-runner.
@bdukes @NicolasUmiastowski Please delete tests/elm-stuff
and run elm test
with a broken seed to redownload. Can you reproduce the issue still? If not, mgold/elm-random-pcg#11 probably fixed it.
from node-test-runner.
@mgold, yes that appears to have fixed it! Great job!
from node-test-runner.
Nice!!!
from node-test-runner.
@mgold : yes for me too the hanging problem disappeared!
That's great.
Thanks a lot, and have a good beer :)
from node-test-runner.
Great! And buy the 🍺 for @ianmackenzie!
@rtfeldman I think you can close the issue. 🎉 😃
from node-test-runner.
Related Issues (20)
- Detect when we run tests twice
- Crash when --output is set for `elm-test make` HOT 8
- Unable to install npm package for 0.18.13-beta4 HOT 12
- Erroneously requires indirect dependencies specified for packages during watch HOT 3
- node 10 is eol
- No output for successful test runs HOT 4
- 0.19.1-revision8 Changelog HOT 1
- Running elm-test leaves fish shell in a weird state HOT 3
- Implicitly exposed tests not found if test module contains a character literal with a unicode sequence HOT 1
- Allow running just non-fuzzed tests HOT 1
- Check if the file read/write in the dependency cache can cause issues in the solver HOT 2
- elm-test doesn't work with Yarn 2 HOT 3
- Junit reporter breaks with new error messages of elm-program-test HOT 2
- RuntimeError: unreachable HOT 14
- Print statistics/progress on signal SIGUSR1 (Linux) / SIGINFO (macOS) HOT 1
- Support --watch for "elm-test make"
- Better support for long running tests
- from 0.19.1-revision2 to 0.19.1-revision7 (btu same with 9 and 12) skip some tests running HOT 7
- Mocha tests fail on modern Node versions HOT 4
- Deduplicate src-dirs HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from node-test-runner.