### Question:
BlackFxSingleBarrierOptionProductPricer { public CurrencyAmount presentValue( ResolvedFxSingleBarrierOption option, RatesProvider ratesProvider, BlackFxOptionVolatilities volatilities) { double price = price(option, ratesProvider, volatilities); ResolvedFxVanillaOption underlyingOption = option.getUnderlyingOption(); return CurrencyAmount.of(underlyingOption.getCounterCurrency(), signedNotional(underlyingOption) * price); } BlackFxSingleBarrierOptionProductPricer(); CurrencyAmount presentValue(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); double price(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); PointSensitivityBuilder presentValueSensitivityRatesStickyStrike(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); CurrencyAmount presentValueDelta(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); double delta(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); CurrencyAmount presentValueGamma(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); double gamma(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); PointSensitivityBuilder presentValueSensitivityModelParamsVolatility(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); double vega(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); CurrencyAmount presentValueTheta(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); double theta(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); MultiCurrencyAmount currencyExposure(
      ResolvedFxSingleBarrierOption option,
      RatesProvider ratesProvider,
      BlackFxOptionVolatilities volatilities); static final BlackFxSingleBarrierOptionProductPricer DEFAULT; }### Answer:
@Test public void regression_pv() { CurrencyAmount pv = PRICER.presentValue(CALL_DKI, RATE_PROVIDER, VOLS); assertThat(pv.getAmount()).isCloseTo(9035006.129433425, offset(NOTIONAL * TOL)); CurrencyAmount pvBase = PRICER.presentValue(CALL_DKI_BASE, RATE_PROVIDER, VOLS); assertThat(pvBase.getAmount()).isCloseTo(9038656.396419544, offset(NOTIONAL * TOL)); CurrencyAmount pvPut = PRICER.presentValue(PUT_DKO, RATE_PROVIDER, VOLS); assertThat(pvPut.getAmount()).isCloseTo(-55369.48871310125, offset(NOTIONAL * TOL)); CurrencyAmount pvPutBase = PRICER.presentValue(PUT_DKO_BASE, RATE_PROVIDER, VOLS); assertThat(pvPutBase.getAmount()).isCloseTo(-71369.96172030675, offset(NOTIONAL * TOL)); }