@Test
  public void testFlatMapMaxConcurrent() {
    final int m = 4;
    final AtomicInteger subscriptionCount = new AtomicInteger();
    Observable<Integer> source =
        Observable.range(1, 10)
            .flatMap(
                new Func1<Integer, Observable<Integer>>() {
                  @Override
                  public Observable<Integer> call(Integer t1) {
                    return compose(Observable.range(t1 * 10, 2), subscriptionCount, m)
                        .subscribeOn(Schedulers.computation());
                  }
                },
                m);

    TestSubscriber<Integer> ts = new TestSubscriber<Integer>();

    source.subscribe(ts);

    ts.awaitTerminalEvent();
    ts.assertNoErrors();
    Set<Integer> expected =
        new HashSet<Integer>(
            Arrays.asList(
                10, 11, 20, 21, 30, 31, 40, 41, 50, 51, 60, 61, 70, 71, 80, 81, 90, 91, 100, 101));
    Assert.assertEquals(expected.size(), ts.getOnNextEvents().size());
    Assert.assertTrue(expected.containsAll(ts.getOnNextEvents()));
  }
 @Test
 public void studentInformationIsPrintedOutCorrectly() {
   GsonReader mockGson = mock(GsonReader.class);
   String studentNr = "13865669";
   Palautukset palautukset = new Palautukset();
   ArrayList<Palautus> palautusLista = new ArrayList<Palautus>();
   Palautus p = new Palautus();
   p.setEtunimi("Tony");
   p.setSukunimi("Kovanen");
   p.setGithubtunnus("rase-");
   p.setOpiskelijanumero("13865669");
   p.setTehtavat("1,2,3,4,5");
   p.setTehtavia(5);
   p.setTunteja(2);
   p.setViikko(1);
   palautusLista.add(p);
   Palautus b = new Palautus();
   b.setEtunimi("Bottleneck");
   b.setSukunimi("");
   b.setGithubtunnus("");
   b.setOpiskelijanumero("13865669");
   b.setTehtavat("Bottleneck");
   b.setTehtavia(0);
   b.setTunteja(0);
   b.setViikko(0);
   palautusLista.add(b);
   palautukset.setPalautukset(palautusLista);
   when(mockGson.read(studentNr)).thenReturn(palautukset);
   StudentInformation info = new StudentInformation(studentNr, mockGson);
   System.out.println(info);
   Assert.assertEquals(
       "Tony Kovanen 13865669\n\nminiprojekti: Bottleneck\n\nviikko 1: 5 tehtävää 1,2,3,4,5 aikaa kului 2 tuntia.\n\nyhteensä: 5 tehtävää 2 tuntia",
       info.toString());
 }
 @Test
 public void returningNullvaluedStudentReturnsASpecialToString() {
   GsonReader mockGson = mock(GsonReader.class);
   String studentNr = "13865669";
   when(mockGson.read(studentNr)).thenReturn(new Palautukset());
   StudentInformation info = new StudentInformation(studentNr, mockGson);
   Assert.assertEquals("Käyttäjää ei löytynyt", info.toString());
 }