feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
52
tests/Paca.Tests/Core/BandwidthRateLimiterGateTests.cs
Normal file
52
tests/Paca.Tests/Core/BandwidthRateLimiterGateTests.cs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
using System;
|
||||
using Paca.Mobile.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Core;
|
||||
|
||||
public class BandwidthRateLimiterGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate277_BandwidthRateLimiter_UnlimitedPreset_AllowsFullSpeed()
|
||||
{
|
||||
var limiter = new BandwidthRateLimiter(BandwidthLimitPreset.Unlimited);
|
||||
|
||||
var delay = limiter.ComputeThrottleDelayMs(chunkBytes: 10_000_000, elapsedMs: 10);
|
||||
Assert.Equal(0, delay);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate278_BandwidthRateLimiter_TokenBucket_EnforcesByteCap()
|
||||
{
|
||||
// 1 MB/s = 1,000,000 bytes/sec
|
||||
var limiter = new BandwidthRateLimiter(bytesPerSecond: 1_000_000);
|
||||
|
||||
// Downloaded 1MB in 200ms -> should throttle ~800ms
|
||||
var delay = limiter.ComputeThrottleDelayMs(chunkBytes: 1_000_000, elapsedMs: 200);
|
||||
Assert.InRange(delay, 750, 850);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate279_BandwidthRateLimiter_Presets_FormatLabelsCleanly()
|
||||
{
|
||||
Assert.Equal("무제한", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Unlimited));
|
||||
Assert.Equal("10 MB/s (고속)", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Fast10MB));
|
||||
Assert.Equal("5 MB/s (일반)", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Medium5MB));
|
||||
Assert.Equal("1 MB/s (절약)", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Low1MB));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate280_BandwidthRateLimiter_DynamicRateChange_TakesEffectImmediately()
|
||||
{
|
||||
var limiter = new BandwidthRateLimiter(bytesPerSecond: 1_000_000);
|
||||
Assert.Equal(1_000_000, limiter.BytesPerSecond);
|
||||
|
||||
// Update mid-stream
|
||||
limiter.SetRate(5_000_000);
|
||||
Assert.Equal(5_000_000, limiter.BytesPerSecond);
|
||||
|
||||
// Now 1MB at 5MB/s expects 200ms total time, elapsed 100ms -> delay ~100ms
|
||||
var delay = limiter.ComputeThrottleDelayMs(chunkBytes: 1_000_000, elapsedMs: 100);
|
||||
Assert.InRange(delay, 80, 120);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue