// Path: src/main/java/com/tempodb/Fold.java
// public enum Fold {
//   /**
//    *  Sum of DataPoints
//    *  @since 1.0.0
//    */
//   SUM,
// 
//   /**
//    *  Multiplication of DataPoints
//    *  @since 1.0.0
//    */
//   MULT,
// 
//   /**
//    *  Arithmetic mean of DataPoints (average)
//    *  @since 1.0.0
//    */
//   MEAN,
// 
//   /**
//    *  Maximum of DataPoints
//    *  @since 1.0.0
//    */
//   MAX,
// 
//   /**
//    *  Minimum of DataPoints
//    *  @since 1.0.0
//    */
//   MIN,
// 
//   /**
//    *  Count of DataPoints
//    *  @since 1.0.0
//    */
//   COUNT,
// 
//   /**
//    *  Variance of DataPoints
//    *  @since 1.0.0
//    */
//   VARIANCE,
// 
//   /**
//    *  Standard deviation of DataPoints
//    *  @since 1.0.0
//    */
//   STDDEV,
// 
//   /**
//    *  Range of DataPoints (max - min)
//    *  @since 1.0.0
//    */
//   RANGE,
// 
//   /**
//    *  First DataPoint in interval (takes the left most DataPoint)
//    *  @since 1.0.0
//    */
//   FIRST
// }
// 
// Path: src/main/java/com/tempodb/MultiRollup.java
// public class MultiRollup implements Serializable {
//   private Period period;
//   private Fold[] folds;
// 
//   /** Serialization lock */
//   private static final long serialVersionUID = 1L;
// 
//   public MultiRollup() {
//     this(Period.minutes(1), new Fold[] { Fold.SUM });
//   }
// 
//   /**
//    *  Base constructor
//    *
//    *  @param period The rollup period.
//    *  @param folds The rollup folding functions.
//    *  @since 1.1.0
//    */
//   public MultiRollup(@JsonProperty("period") Period period, @JsonProperty("folds") Fold[] folds) {
//     this.period = checkNotNull(period);
//     this.folds = checkNotNull(folds);
//   }
// 
//   /**
//    *  Returns the rollup period.
//    *  @return The rollup period.
//    *  @since 1.1.0
//    */
//   @JsonProperty("period")
//   public Period getPeriod() { return period; }
// 
//   /**
//    *  Sets the rollup period.
//    *  @param period The period.
//    *  @since 1.1.0
//    */
//   public void setPeriod(Period period) { this.period = checkNotNull(period); }
// 
//   /**
//    * Returns the rollup folding functions.
//    * @return The rollup folding functions.
//    * @since 1.1.0
//    */
//   @JsonProperty("folds")
//   public Fold[] getFolds() { return Arrays.copyOf(folds, folds.length); }
// 
//   /** Sets the rollup folding functions.
//    *  @param folds The rollup folding functions.
//    *  @since 1.1.0
//    */
//   public void setFold(Fold[] folds) { this.folds = checkNotNull(folds); }
// 
//   @Override
//   public String toString() {
//     return String.format("MultiRollup(period=%s,folds=%s)", period.toString(), Arrays.toString(folds).toLowerCase());
//   }
// 
//   @Override
//   public int hashCode() {
//     return new HashCodeBuilder(13, 41)
//       .append(period)
//       .append(folds)
//       .toHashCode();
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if(obj == null) return false;
//     if(obj == this) return true;
//     if(!(obj instanceof MultiRollup)) return false;
// 
//     MultiRollup rhs = (MultiRollup)obj;
//     return new EqualsBuilder()
//       .append(period, rhs.period)
//       .append(folds, rhs.folds)
//       .isEquals();
//   }
// }


import java.io.IOException;
import org.joda.time.Period;
import org.junit.*;
import static org.junit.Assert.*;
import com.tempodb.Fold;
import com.tempodb.MultiRollup;
package com.tempodb.json;





public class MultiRollupTest {

  @Test
  public void testDeserialize() throws IOException {
    String json = "{" +
      "\"period\":\"PT1M\"," +
      "\"folds\":[\"max\",\"sum\"]" +
    "}";

    MultiRollup rollup = Json.loads(json, MultiRollup.class);
    MultiRollup expected = new MultiRollup(Period.minutes(1), new Fold[] { Fold.MAX, Fold.SUM });
    assertEquals(expected, rollup);
  }

  @Test
  public void testSerialize() throws IOException {
    MultiRollup rollup = new MultiRollup(Period.minutes(1), new Fold[] { Fold.MAX, Fold.SUM });
// Path: src/main/java/com/tempodb/Fold.java
// public enum Fold {
//   /**
//    *  Sum of DataPoints
//    *  @since 1.0.0
//    */
//   SUM,
// 
//   /**
//    *  Multiplication of DataPoints
//    *  @since 1.0.0
//    */
//   MULT,
// 
//   /**
//    *  Arithmetic mean of DataPoints (average)
//    *  @since 1.0.0
//    */
//   MEAN,
// 
//   /**
//    *  Maximum of DataPoints
//    *  @since 1.0.0
//    */
//   MAX,
// 
//   /**
//    *  Minimum of DataPoints
//    *  @since 1.0.0
//    */
//   MIN,
// 
//   /**
//    *  Count of DataPoints
//    *  @since 1.0.0
//    */
//   COUNT,
// 
//   /**
//    *  Variance of DataPoints
//    *  @since 1.0.0
//    */
//   VARIANCE,
// 
//   /**
//    *  Standard deviation of DataPoints
//    *  @since 1.0.0
//    */
//   STDDEV,
// 
//   /**
//    *  Range of DataPoints (max - min)
//    *  @since 1.0.0
//    */
//   RANGE,
// 
//   /**
//    *  First DataPoint in interval (takes the left most DataPoint)
//    *  @since 1.0.0
//    */
//   FIRST
// }
// 
// Path: src/main/java/com/tempodb/MultiRollup.java
// public class MultiRollup implements Serializable {
//   private Period period;
//   private Fold[] folds;
// 
//   /** Serialization lock */
//   private static final long serialVersionUID = 1L;
// 
//   public MultiRollup() {
//     this(Period.minutes(1), new Fold[] { Fold.SUM });
//   }
// 
//   /**
//    *  Base constructor
//    *
//    *  @param period The rollup period.
//    *  @param folds The rollup folding functions.
//    *  @since 1.1.0
//    */
//   public MultiRollup(@JsonProperty("period") Period period, @JsonProperty("folds") Fold[] folds) {
//     this.period = checkNotNull(period);
//     this.folds = checkNotNull(folds);
//   }
// 
//   /**
//    *  Returns the rollup period.
//    *  @return The rollup period.
//    *  @since 1.1.0
//    */
//   @JsonProperty("period")
//   public Period getPeriod() { return period; }
// 
//   /**
//    *  Sets the rollup period.
//    *  @param period The period.
//    *  @since 1.1.0
//    */
//   public void setPeriod(Period period) { this.period = checkNotNull(period); }
// 
//   /**
//    * Returns the rollup folding functions.
//    * @return The rollup folding functions.
//    * @since 1.1.0
//    */
//   @JsonProperty("folds")
//   public Fold[] getFolds() { return Arrays.copyOf(folds, folds.length); }
// 
//   /** Sets the rollup folding functions.
//    *  @param folds The rollup folding functions.
//    *  @since 1.1.0
//    */
//   public void setFold(Fold[] folds) { this.folds = checkNotNull(folds); }
// 
//   @Override
//   public String toString() {
//     return String.format("MultiRollup(period=%s,folds=%s)", period.toString(), Arrays.toString(folds).toLowerCase());
//   }
// 
//   @Override
//   public int hashCode() {
//     return new HashCodeBuilder(13, 41)
//       .append(period)
//       .append(folds)
//       .toHashCode();
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if(obj == null) return false;
//     if(obj == this) return true;
//     if(!(obj instanceof MultiRollup)) return false;
// 
//     MultiRollup rhs = (MultiRollup)obj;
//     return new EqualsBuilder()
//       .append(period, rhs.period)
//       .append(folds, rhs.folds)
//       .isEquals();
//   }
// }


// Path: src/test/java/com/tempodb/json/MultiRollupTest.java
import java.io.IOException;
import org.joda.time.Period;
import org.junit.*;
import static org.junit.Assert.*;
import com.tempodb.Fold;
import com.tempodb.MultiRollup;

package com.tempodb.json;





public class MultiRollupTest {

  @Test
  public void testDeserialize() throws IOException {
    String json = "{" +
      "\"period\":\"PT1M\"," +
      "\"folds\":[\"max\",\"sum\"]" +
    "}";

    MultiRollup rollup = Json.loads(json, MultiRollup.class);
    MultiRollup expected = new MultiRollup(Period.minutes(1), new Fold[] { Fold.MAX, Fold.SUM });
    assertEquals(expected, rollup);
  }

  @Test
  public void testSerialize() throws IOException {
    MultiRollup rollup = new MultiRollup(Period.minutes(1), new Fold[] { Fold.MAX, Fold.SUM });
    String expected = "{" +